这期内容当中小编将会给大家带来有关如何在Android中利用Viewpager取消滑动,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
前言
现在很多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中利用Viewpager取消滑动了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。