1,設置頁面切換動畫
自定義類,並繼承PageTransformer,下面舉個例子,文章末有demo地址,該demo集成20餘種動畫供你選擇
import android.support.v4.view.ViewPager;
import android.view.View;
public class DepthPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.75f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
} else if (position <= 1) { // (0,1]
// Fade the page out.
view.setAlpha(1 - position);
// Counteract the default slide transition
view.setTranslationX(pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
viewpager.setPageTransformer(true,depthPageTransformer )就可以了
2,設置動畫持續時長
viewpager的setCurrentItem 會調用默認的250毫秒,也就是 Scroller的默認時間
先自定義一個scroller類,在這裏通過反射更改viewpager的Scroller對象,
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.animation.Interpolator;
import android.widget.Scroller;
import java.lang.reflect.Field;
public class ViewPagerScroller extends Scroller {
private int mDuration = 2000;/*default duration time*/
/**
* Set custom duration time.
*
* @param duration duration
*/
public void setScrollDuration(int duration) {
mDuration = duration;
}
/**
* Get duration time.
*
* @return duration
*/
public int getmDuration() {
return mDuration;
}
public ViewPagerScroller(Context context) {
super(context);
}
public ViewPagerScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}
public ViewPagerScroller(Context context, Interpolator interpolator, boolean flywheel) {
super(context, interpolator, flywheel);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, mDuration);
}
public void initViewPagerScroll(ViewPager pager) {
try {
Field field = ViewPager.class.getDeclaredField("mScroller");
field.setAccessible(true);
field.set(pager, this);
} catch (Exception e) {
e.printStackTrace();
}
}
}
調用initViewPagerScroll(ViewPager pager)將設置ViewPager 的頁面切換動畫時長
3,設置自動播放間隔時常 利用 延時hander完成,isScroll作爲開始和停止自動播放的控制標記位
int autoScrollTime=2000;//自動播放間隔時常
boolean isScroll=true;
Handler handler=new Handler(this.getContext().getMainLooper());
Runnable autoRun=new Runnable() {
@Override
public void run() {
if(isScroll) {
int position = viewPager.getCurrentItem() + 1;
viewPager.setCurrentItem(position, true);
handler.postDelayed(this, autoScrollTime);
}
}
};
public void startOrStopScroll(boolean isScroll){
this.isScroll=isScroll;
if(isScroll()){
handler.postDelayed(autoRun,autoScrollTime);
}
}
寫了一個能無限往後播放的viewpager完整demo地址,不想看這零碎的文章,可以下載demo直接幹代碼,集成20餘種動畫供你選擇
https://download.csdn.net/download/t7g367/12517959