viewpager自動滾動,並且設置動畫,設置動畫持續時長,設置自動播放間隔時常

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章