您的位置:首页 > 其它

不一样的ViewPager

2015-10-13 21:13 155 查看

1.ViewPager禁止手指滑动

查查API发现ViewPager没有公布这个方法,可能觉得也没啥用,谁会把ViewPager禁止用手滑动呢?

禁止ViewPager手指滑动,只允许点击滑动,开始我觉得重写onTouchEvent就是了,拦截触摸事件,然而事情没有那么简单。。。。贴代码

/**
* Created on 2015/10/12.
* Author:chendong
* Email:15054297071@163.com
* CSDN: chendong_
*/

/**
* 不可手动滑动的ViewPager
*/
public class NoScrollViewPager extends ViewPager{

private boolean isPagingEnabled = false;

public NoScrollViewPager(Context context) {
super(context);
}

public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
return this.isPagingEnabled && super.onTouchEvent(event);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return this.isPagingEnabled && super.onInterceptTouchEvent(event);
}

public void setPagingEnabled(boolean b) {
this.isPagingEnabled = b;
}
}


2.调整ViewPager滑动的速度和加速方式

这个仅仅适用于使用setCurrentItem()方法调用时你觉得他的速度或者滑动方式你不太满意的时候。首先定义一个继承Scroller 的子类,在ViewPager中也是这个变量来管理滑动时间和速度的。

/**
* Created on 2015/10/12.
* Author:chendong
* Email:15054297071@163.com
* CSDN: chendong_
*/
public class FixedSpeedScroller extends Scroller {

private int mDuration = 5000;

public FixedSpeedScroller(Context context) {
super(context);
}

public FixedSpeedScroller(Context context, Interpolator interpolator) {
super(context, interpolator);
}

@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) {
super.startScroll(startX, startY, dx, dy, mDuration);
}

public void setmDuration(int time) {
mDuration = time;
}

public int getmDuration() {
return mDuration;
}
}


接下来使用反射将自己的Scroller设置到ViewPager中,通过设置时间和插值器就会改变滑动的方式,比如可以实现加速后减速,或者甩一下再加速,或者到达之后跳动一下,,就是修改插值器的事情了,效果还不错的。

/**
* 使用反射设置切换动画效果
*
* @param duration
* @param vp
*/
private void setViewPagerDuration(int duration, Interpolator interpolator,ViewPager vp) {
try {
FixedSpeedScroller mScroller = null;
Field mField = ViewPager.class.getDeclaredField("mScroller");
mField.setAccessible(true);
mScroller = new FixedSpeedScroller(vp.getContext(),
interpolator));
mScroller.setmDuration(duration);
mField.set(vp, mScroller);
} catch (Exception e) {
e.printStackTrace();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: