簡體   English   中英

android - 如何為viewPager設置動畫

[英]android -How to animate viewPager

這是我制作ViewPager代碼。我想在更改頁面之間進行動畫處理。 所以我寫這段代碼:

ViewPagerAdapter adapter;
                adapter = new ViewPagerAdapter(FistActiivty.this,imges);
                vp.setAdapter(adapter);
                pageSwitcher(2);

try {
                    Field mScroller;
                    mScroller = ViewPager.class.getDeclaredField("mScroller");
                    mScroller.setAccessible(true); 
                    Interpolator sInterpolator = new AccelerateInterpolator();
                    FixedSpeedScroller scroller = new FixedSpeedScroller(vp.getContext(), sInterpolator);
                    // scroller.setFixedDuration(5000);
                    mScroller.set(vp, scroller);
                } catch (Exception e) {
                    Log.v("this",e.getMessage());
                }

public class FixedSpeedScroller extends Scroller {

        private int mDuration = 2000;

        public FixedSpeedScroller(Context context) {
            super(context);
        }

        public FixedSpeedScroller(Context context, Interpolator interpolator) {
            super(context, interpolator);
        }

        public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
            super(context, interpolator, flywheel);
        }

        @Override
        public void startScroll(int startX, int startY, int dx, int dy, int duration) {
            super.startScroll(startX, startY, dx, dy, mDuration);
        }

        @Override
        public void startScroll(int startX, int startY, int dx, int dy) {
            // Ignore received duration, use fixed one instead
            super.startScroll(startX, startY, dx, dy, mDuration);
        }
    }

    public void pageSwitcher(int seconds) {
        timer = new Timer(); // At this line a new Thread will be created
        timer.scheduleAtFixedRate(new RemindTask(), 0, seconds * 1000);

    }
    class RemindTask extends TimerTask {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    Log.v("this","change pager " +page);
                    if (page > imges.length) { 
                        vp.setCurrentItem(0);
                        page=1;
                    } else {
                        vp.setCurrentItem(page++);
                    }
                }
            });

        }
    }


    class ViewPagerAdapter extends PagerAdapter {
        Context context;
        String[] img;
        LayoutInflater inflater;
        ImageLoader imageLoader = ImageLoader.getInstance();
        DisplayImageOptions options;
        private ImageLoadingListener imageListener;

        public ViewPagerAdapter(Context context, String[] img) {
            this.context = FistActiivty.this;
            this.img = img;
        }

        @Override
        public int getCount() {
            return img.length;
        }


        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == ((RelativeLayout) object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imgflag;
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View itemView = inflater.inflate(R.layout.viewpager_item, container,false);
            imgflag = (ImageView) itemView.findViewById(R.id.flag);
            imageLoader.displayImage(img[position], imgflag,options, imageListener);
            ((ViewPager) container).addView(itemView);

            return itemView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // Remove viewpager_item.xml from ViewPager
            ((ViewPager) container).removeView((RelativeLayout) object);

        }

    }

這段代碼的結果是這樣的。 它每隔2秒更改一次viewpager並且工作正常,但在更改頁面之間沒有動畫,但是當我手動更改尋呼機時,它會為其設置動畫。

如果要更改頁面,如何強制它進行動畫處理?

謝謝。

如果這就是你的意思,嘗試使用smoothscroll選項。
在TimerTask中更改為此內容。

if (page > imges.length) { 
   vp.setCurrentItem(0, true);
   page=1;
} else {
   vp.setCurrentItem(page++, true);
}

我認為您應該使用PageTransformer在頁面更改時應用動畫。

請訪問鏈接...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM