多语言展示
当前在线:805今日阅读:176今日分享:34

利用反射控制Android中ViewPager的滑动速度

在使用ViewPager的过程中,有时候需要通过调用其setCurrentItem()跳转到具体某一个页面,比如SlidingMenu和ViewPager联合使用时,左侧目录和ViewPager页面实现联动就需要使用setCurrentItem方法,但ViewPager默认状态下,页面跳转是有滑动效果的,这样导致在直接跳转到某一个页面时有瞬间闪动的情况,看上去不太美观,本文利用java的反射机制来控制ViewPager的滑动速度,加强用户体验。
方法/步骤
1

一、自定义Scroll类,用于调节滑动速度:import android.content.Context;import android.view.animation.Interpolator;import android.widget.Scroller;/*** 自定义Scroller,用于调节ViewPager滑动速度**/public class ViewPagerScroller extends Scroller {    private int mScrollDuration = 0;// 滑动速度    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, int duration) {        super.startScroll(startX, startY, dx, dy, mScrollDuration);    }    @Override    public void startScroll(int startX, int startY, int dx, int dy) {        super.startScroll(startX, startY, dx, dy, mScrollDuration);    }}

2

二、利用java反射机制,将自定义Scroll和ViewPager结合来调节ViewPager的滑动效果:/**     * 设置ViewPager的滑动速度     *      * */    private void initViewPagerScroll( ){    try {            Field mScroller = null;            mScroller = ViewPager.class.getDeclaredField('mScroller');            mScroller.setAccessible(true);             ViewPagerScroller scroller = new ViewPagerScroller( mViewPager.getContext( ) );            mScroller.set( mViewPager, scroller);        }catch(NoSuchFieldException e){                }catch (IllegalArgumentException e){                }catch (IllegalAccessException e){                }    }

3

三、在初始化ViewPager的地方调用initViewPagerScroll( )。

推荐信息