鬼雾衬肩,捷克国家队,难以抗拒饶阡陌
前言
现在很多app,首页不允许滑动切换(因为页面加载吧),但是又用viewpage来管理frgament.因为方便嘛.
以前在网上找的例子:
public class noscrollviewpager extends viewpager { public noscrollviewpager(context context, attributeset attrs) { super(context, attrs); } public noscrollviewpager(context context) { super(context); } @override public boolean dispatchtouchevent(motionevent ev) { //不拦截,否则子孩子都无法收到事件,一般这个自定义的时候都不作处理 return super.dispatchtouchevent(ev); } @override public boolean onintercepttouchevent(motionevent ev) { return super.onintercepttouchevent(ev); } @override public boolean ontouchevent(motionevent ev) { return true; }
这个自定义如果继承的viewpager是低版本的,那么是没问题的.
但是如果你编译时用是高版本的api,5.0以后吧.上面这个自定义就会失效,
你会发现,会有细微的滑动.还是能滑动的
判断老的还是新的,看setonpagechangelistener就知道了
最新的viewpager里面这个方法已经废弃了,改成addonpagechangelistener()
了.
由于之前改viewpager做懒加载.一直保留了一个老版本的viewpager使用.直到最近才发现.
改进后
public class noscrollviewpager extends viewpager { private boolean isscroll; public noscrollviewpager(context context,attributesetattrs{ super(context, attrs); } public noscrollviewpager(context context) { super(context); } /** * 1.dispatchtouchevent一般情况不做处理 *,如果修改了默认的返回值,子孩子都无法收到事件 */ @override public boolean dispatchtouchevent(motionevent ev) { return super.dispatchtouchevent(ev); // return true;不行 } /** * 是否拦截 * 拦截:会走到自己的ontouchevent方法里面来 * 不拦截:事件传递给子孩子 */ @override public boolean onintercepttouchevent(motionevent ev) { // return false;//可行,不拦截事件, // return true;//不行,孩子无法处理事件 //return super.onintercepttouchevent(ev);//不行,会有细微移动 if (isscroll){ return super.onintercepttouchevent(ev); }else{ return false; } } /** * 是否消费事件 * 消费:事件就结束 * 不消费:往父控件传 */ @override public boolean ontouchevent(motionevent ev) { //return false;// 可行,不消费,传给父控件 //return true;// 可行,消费,拦截事件 //super.ontouchevent(ev); //不行, //虽然onintercepttouchevent中拦截了, //但是如果viewpage里面子控件不是viewgroup,还是会调用这个方法. if (isscroll){ return super.ontouchevent(ev); }else { return true;// 可行,消费,拦截事件 } } public void setscroll(boolean scroll) { isscroll = scroll; } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论