当前位置: 首页 > 编程笔记 >

Android中Viewpager禁止滑动的实现

扈翰
2023-03-14
本文向大家介绍Android中Viewpager禁止滑动的实现,包括了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滑动实现实例,包括了Android之禁止ViewPager滑动实现实例的使用技巧和注意事项,需要的朋友参考一下 Android之禁止ViewPager滑动实现实例 当我们想在同一个Activity或者Fragment中展示多个页面时往往会用到ViewPager,通过滑动,我们可以很方便地在不同的页面中切换。但是在某些情况下我们可能并不需要通过滑动

  • 本文向大家介绍Android viewpage实现可控制的禁止滑动,包括了Android viewpage实现可控制的禁止滑动的使用技巧和注意事项,需要的朋友参考一下 Android编程常常使用ViewPager结合Fragment实现可以左右滑动切换的页面,但有时会遇到这样的需求,让ViewPager根据特定条件来控制其是否滑动。 实现思路:重写ViewPager,覆盖 onTouchEvent

  • 本文向大家介绍在vue中实现禁止屏幕滚动,禁止屏幕滑动,包括了在vue中实现禁止屏幕滚动,禁止屏幕滑动的使用技巧和注意事项,需要的朋友参考一下 今天写了一个Vue弹层组件,用来全屏查看图片的,大概是下面这么一个效果: 其中背景是透明色的,但是弹出这个组件时手指滑动、鼠标滚轮滑动,底部页面是会动。 作为自己开发的一个常用的组件,这种bug当然是要解决的。 于是学艺不精的我在网上找了蛮久的,看了不少博

  • 本文向大家介绍android viewpager实现竖屏滑动效果,包括了android viewpager实现竖屏滑动效果的使用技巧和注意事项,需要的朋友参考一下 Viewpager 横向滑动效果系统就自带了很多种,比如这个 效果 那如果做成竖屏的这种效果呢 。我百度过很多,效果都不是很好,有的代码特别多而且存在很多问题。我结合了以前别人的代码现在来教大家个简单的实现过程。 首先自定义Viewpa

  • 本文向大家介绍Android 中 viewpager 滑动指示器的实例代码,包括了Android 中 viewpager 滑动指示器的实例代码的使用技巧和注意事项,需要的朋友参考一下 先看下效果图: 这个需要用到1个开源的 库,这个后面也会说下的。 工程目录: 1. MainActivity.java UnderlinePageIndicatorEx.java ArrayFragment.java

  • 我想禁用刷卡,但仅限于右侧。我在这个答案中找到了一个有效的解决方案。不幸的是,这复制了整个源代码以实现目标。有没有只继承现有类而不复制的方法?