[英]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.