不一样的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(); } }
相关文章推荐
- oracle安装完初次连接问题
- Mybatis基础框架学习(五)
- Spring容器的工具类
- 【PAT】1088. Rational Arithmetic (20)
- 1002. A+B for Polynomials (25)
- Javascript中的几种继承方式
- POI读写excel实例 (1)
- 解决:子元素设置margin-top,父元素也受影响的问题
- SetThreadAffinityMask的用法
- 【队列项目2 - 建立链队算法库——第7周】
- hdu 3727 Jewel(主席树学习第四弹)
- Swift 播放视频
- python中的pandas包的数据清洗能力
- Cpp--字符串快速查找运用
- 【bzoj3174】【TJOI2013】【拯救小矮人】【贪心+dp】
- ZOJ 1136 Multiply
- spring scope
- C++中的static关键字
- JS的运算
- Swift 原生网络通信