Android -How to animate viewPager

This is my code to create a ViewPager . I want to animate between page changes. so i write this code:

 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); } } 

The result of this code. It changes the ViewPager every 2 seconds, and it works fine, but does not change between page changes, but when I manually change the pager, it enlivens it.

How can I make him animate when he wants to change pages?

Thanks.

+5
source share
2 answers

Try using the smoothscroll parameter if that's what you mean.
Change this inside your TimerTask.

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

I think you should use PageTransformer to apply animation when the page changes.

Please visit this link ...

0
source

All Articles