首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在触摸/拖动某些视图时禁用viewpager

在触摸/拖动某些视图时禁用ViewPager,可以通过以下步骤实现:

  1. 首先,需要获取到ViewPager对象,可以通过findViewById方法或者在布局文件中设置id来获取。
  2. 接下来,创建一个自定义的ViewPager类,继承自ViewPager,并重写onInterceptTouchEvent和onTouchEvent方法。
  3. 在onInterceptTouchEvent方法中,判断当前是否需要禁用ViewPager的触摸事件。如果需要禁用,则返回false,否则返回super.onInterceptTouchEvent(ev)。
  4. 在onTouchEvent方法中,同样判断当前是否需要禁用ViewPager的触摸事件。如果需要禁用,则直接返回false,否则返回super.onTouchEvent(ev)。
  5. 最后,在需要禁用ViewPager触摸事件的地方,使用自定义的ViewPager类替换原来的ViewPager。

以下是一个示例代码:

代码语言:txt
复制
public class CustomViewPager extends ViewPager {
    private boolean isTouchEnabled;

    public CustomViewPager(Context context) {
        super(context);
        this.isTouchEnabled = true;
    }

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.isTouchEnabled = true;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // 判断是否需要禁用触摸事件
        if (isTouchEnabled) {
            return super.onInterceptTouchEvent(ev);
        }
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        // 判断是否需要禁用触摸事件
        if (isTouchEnabled) {
            return super.onTouchEvent(ev);
        }
        return false;
    }

    public void setTouchEnabled(boolean enabled) {
        this.isTouchEnabled = enabled;
    }
}

使用示例:

代码语言:txt
复制
CustomViewPager viewPager = findViewById(R.id.viewPager);
viewPager.setTouchEnabled(false); // 禁用ViewPager的触摸事件

这样,在需要禁用ViewPager触摸事件的时候,调用setTouchEnabled方法即可。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发笔记(一百零一)滑出式菜单

现在我们既希望两个子视图的宽度是match_parent,又希望能够拖动两个子视图,还有没有办法呢?...所以我们可以给视图添加触摸监听器OnTouchListener,触摸坐标发生变化的同时,给菜单子页面隐入隐出对应的宽度,从而达到抽屉式拉出菜单的效果。...2、菜单默认左边页,内容默认右边页,所以首次加载视图,页面要自动滑到右边的内容页(调用scrollTo方法滚动到内容页)。...TOUCHMODE_MARGIN表示只空白处响应触摸,TOUCHMODE_FULLSCREEN表示全屏均响应触摸,TOUCHMODE_NONE表示不响应触摸。...使用SlidingMenu ViewPager本身做翻页操作就使用了Fragment,然后SlidingMenu也采用Fragment区分菜单布局和内容布局,因此如果把ViewPager作为内容布局

1.2K70

自定义无限循环ViewPager(二)――ViewPager滑动原理解析

阅读本文之前,大家可以先去了解下Scroller的用法,以便大家更好的理解ViewPager的滑动原理。...而ViewPager根据手势产生页面移动也正是因为重写了这两个方法。ViewPager存在两种移动方式: MOVE触摸事件中,页面随手指的拖动而移动。...简单来说,performDrag()方法让ViewPager视图滑动了。紧接着,再看看pageScrolled()方法到底做了那些操作。...并且ViewPager类中的onPageScrolled将mCalledSuper设置为了true,用于判断子类有没有调用。...虽然,onInterceptTouchEvent()中产生了拖动效果,但主要还是对是否拦截事件作出判断,关于页面的滑动还是onTouchEvent()中进行处理。

2.3K10
  • ViewPager源码分析

    1.jpg 先看down事件,第一部分是初始化触摸坐标和相关变量,比较简单;第二部分是当ViewPager处于SCROLL_STATE_SETTLING(快要滑到最终位置),先停止其滚动...这里的mIsBeingDragged变量很重要,onInterceptTouchEvent的返回值就是mIsBeingDragged,返回true说明ViewPager正在被拖动,需要到onTouchEvent...1.jpg 再来看看move事件,主要工作是判断手指左右滑动的距离,超过一定阙值后就把mIsBeingDragged设为true,说明ViewPager要消费这个事件,最终拖动逻辑onTouchEvent...1.jpg        move事件主要做两件事,第一件事是当mIsBeingDragged为false,重新检测一下当前是否符合左右滑动的条件(mIsBeingDragged为false为啥会回调...总结        ViewPager是一个很强大也很常用的View,其源码有3000多行,本篇只对核心的4个方面进行分析,如果需要对ViewPager进行源码修改来自定义某些行为,可以优先考虑从这4个方面去修改

    1.7K40

    如何处理手势冲突 | 手势导航连载 (三)

    注意,这个问题也包括那些占据屏幕较大区域,且包括了手势交互区域的视图/控件。比如 DrawerLayout 或尺寸较大的 ViewPager。 问题 4: 该视图/控件需要滑动拖动交互吗?...如果用户可以将视图滚动到手势交互区域之外,则应该视为没有交互冲突。 您也许已经注意到,流程图中多图显示控件 (ViewPager) 在此处回答 "否"。...出现这种冲突,我们就可以使用上面提到的手势区域排除 API 来解决。 手势区域排除 API 通常会在两个地方被调用: 当视图被布局 (onLayout),或是当视图被绘制 (onDraw)。...正如我们前面提到的,手势区域排除 API 只有万不得已的情况下才可以使用,因此我们计算了可能需要应用这套机制的触摸对象的面积。触摸对象的最小推荐尺寸是 48dp。...我们取 4个触摸对象,即 4 × 48dp = 192dp。再加入一点富余量,即为 200dp。 如果开发者要求边缘上切出 200dp 以上的区域会怎样?

    4.9K30

    Android开发笔记(四十五)手势事件

    TouchEvent 下面是触摸事件的常用方法: getAction : 获取当前的动作 getX : 获取当前控件内部的相对坐标X getY : 获取当前控件内部的相对坐标Y getRawX...,然后触摸方法onTouch中由GestureDetector接管触摸事件 :  private ScrollTextView tv_rough; private GestureDetector...Activity中重写onTouchEvent方法,该方法中由GestureDetector接管触摸事件。...2、底层控件中,如果当前手势还未处理完成,那么必须阻止上级视图的手势拦截。...下面示例代码演示了这么一个意图:当用户按下或者滑动,当前控件需要响应手势事件,请上级视图不要拦截手势;当用户松开或取消,当前控件已经处理完毕,允许上级视图拦截手势。

    1.3K30

    探究 css touch-action 属性

    使用 Touch_events 的应用程序通过调用 preventDefault() 禁用浏览器处理手势,但也应使用触摸操作确保浏览器调用任何事件侦听器之前,了解应用程序的意图。...当手势开始,浏览器与触摸的元素及其所有祖先的触摸动作值相交直到一个实现手势(换句话说,第一个包含滚动元素)的触摸动作值。...这意味着在实践中,触摸动作通常仅适用于具有某些自定义行为的单个元素,而无需该元素的任何后代上明确指定触摸动作。 手势开始之后,触摸动作值的更改将不会对当前手势的行为产生任何影响。...启用平移和缩小缩放手势,但禁用其他非标准手势,例如双击以进行缩放。 禁用双击可缩放功能可减少浏览器在用户点击屏幕延迟生成点击事件的需要。...请注意,滚动“向上”(pan-up)意味着用户正在将其手指向下拖动到屏幕表面上,同样 pan-left 表示用户将其手指向右拖动

    1.8K10

    最新iOS设计规范六|10大交互规范(User Interaction)

    当需要用户识别物体,使用“识别并保持靠近”这样的术语,而不是点击和触摸。 使用平易近人的术语。某些人可能不熟悉近场通信。为了使其更平易近人,请不要使用技术性术语,如NFC、近场通信等。...、呼出在分屏视图控制器中的隐藏视图列表中显示“删除”按钮、或者预览中呼出操作列表。...旋转(Rotate):旋转图像或视图 摇晃(Shake):撤销或重做 六、3D 触控(3D Touch ) 3D触摸可以说是为触摸交互方式提供了另一个维度的交互,支持3D触摸的设备上,用户可以通过对屏幕施加不同程度的压力来唤醒不同的功能...触觉反馈的一致性有助于用户某些触觉模式和某些体验之间建立触觉关联。例如:如果你的APP游戏角色未能完成任务播放特定的触觉模式,用户则会学习将该触觉模式与否定的结果关联起来。...触摸并按住所选内容使它看起来像上升并附着在用户的手指上。拖动内容,动画和视觉提示会确定可能的目的地。系统还会显示一个标志,指示何时无法删除,否则将导致复制内容而不是移动内容。 起始点和目的地 ?

    4.2K30

    Android开发笔记(六十七)嵌入页面的碎片

    Fragment可以协助我们完成如下任务: 1、一个页面中嵌入多个连续可翻页的子视图,方面使用ViewPager统一管理; 2、开发一些通用的小部件,内部封装好代码逻辑,可直接嵌入到任意页面。...3、动态注册可以构造Fragment传入参数,而静态注册无法直接传参。...因此为了避免触摸当前页面导致触发上一页面的点击事件,需要在页面切换禁用上一页面的相关控件,当然返回到上一页面就得开启相关控件。...onCreateView : 创建Fragment的视图onCreate之后调用。...onDestroyView : 结束Fragment的视图onDestroy之前调用。 onDetach : 取消关联Fragment与Activity,onDestroy之后调用。

    1.3K60

    ViewPager2打造Banner轮播图

    效果图 上图是天津地铁APP的Banner也是本文要实现的效果 一、如何使用ViewPager2 ①app下的build.gradle文件中添加如下依赖 implementation "androidx.viewpager2...:viewpager2:1.0.0" ②同步之后就可以布局中使用啦 <androidx.viewpager2.widget.ViewPager2 android:id="@+id/bannerVp...滑动到第0位和最后一位的处理分别如下 位置 处理 currentPosition == 0 setCurrentItem(adapter.itemCount - 2, false) currentPosition...bannerVp.removeCallbacks(counter) } } 触摸暂停滚动 我们知道触摸调用setOnTouchListener即可,但是给ViewPager2使用的时候你会发现不起作用...ViewPager2是一个视图组,未调用setOnTouchListener是因为recyclerview拦截事件并首先调用onTouchEvent bannerVp.getChildAt(0)给它设置监听即可

    2.2K50

    ViewPager2打造轮播Banner

    [效果图] 上图是天津地铁APP的Banner也是本文要实现的效果 一、如何使用ViewPager2 ①app下的build.gradle文件中添加如下依赖implementation "androidx.viewpager2...滑动到第0位和最后一位的处理分别如下 位置 处理 currentPosition == 0 setCurrentItem(adapter.itemCount - 2, false) currentPosition...bannerVp.removeCallbacks(counter) } }触摸暂停滚动bannerVp.getChildAt(0).setOnTouchListener { _...方法进行实现 mLooper是我定义的Runnable,后面会讲原因 滑动实现了,但启停时机也很重要 所以这里选用onWindowFocusChanged因为它在窗体失去和获得焦点的时候会通知我们 我们知道触摸调用...ViewPager2是一个视图组,未调用setOnTouchListener是因为recyclerview拦截事件并首先调用onTouchEvent bannerVp.getChildAt(0)给它设置监听即可

    1.8K30

    微信小程序官方组件展示之视图容器movable-view源码

    以下将展示微信小程序之视图容器movable-view源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。...功能描述:可移动的视图容器,页面中可以拖拽滑动。movable-view必须在 movable-area 组件中,并且必须是直接子节点,否则不能移动。...值越大移动越快1.2.0frictionnumber2否摩擦系数,用于控制惯性滑动的动画,值越大摩擦力越大,滑动越快停止;必须大于0,否则会被设置成默认值1.2.0disabledbooleanFALSE否是否禁用...之后支持1.9.90htouchmoveeventhandle否初次手指触摸后移动为横向的移动触发,如果 catch 此事件,则意味着 touchmove 事件也被catch1.9.90vtouchmoveeventhandle...否初次手指触摸后移动为纵向的移动触发,如果 catch 此事件,则意味着 touchmove 事件也被catch1.9.90bindchange 返回的 source 表示产生移动的原因值说明touch

    47040

    Android实现viewpager实现循环轮播效果

    这样当往左滑显示的是e,此时设置viewpager.setCurrentItem(5),当右滑到e的时候往右滑,此时设置viewpager.setCurrentItem(1),这样就实现了轮播效果。...话不多说上一下代码: /** * viewpager切换页面动画 */ public class MainActivity extends AppCompatActivity { private ViewPager...R.drawable.img7,R.drawable.img8,R.drawable.img1};//图片数组 boolean isStop=false; private LinearLayout line;//小圆圈父视图...当用手指滑动,如果手指按在页面上不动,position和当前页面index是一致的;如果手指向左拖动(相应页面向右翻动),这时候position大部分时间和当前页面是一致的,只有翻页成功的情况下最后一次调用才会变为目标页面...这和用手指拖动页面翻动是基本一致的。

    1.3K10

    Mono for Android 实现高效的导航

    用户既可以点击上面的 ‘SECTION 0’、 ‘SECTION 1’、 ‘SECTION 2’ 标签切换视图, 也可以视图上水平拖动切换视图, 同时标签选中项也要同步选中, 实现的代码如下: [Activity..._appSectionsPagerAdapter; // 当水平滑动切换视图, 设置选中的标签 this....> 下拉列表 下拉列表导航是 ActionBar 中显示一个下拉列表 (Spinner), 就像一个菜单, 只显示选中的菜单项对应的视图, 如下图所示: ?..._navSectionsPagerAdapter; // 当 ViewPager 的选中页切换, 同步 actionBar 的选中项。 this...._viewPager.CurrentItem = itemPosition; return true; } } 向上导航 所谓的向上导航, 就是 Activity 的图标上显示一个向左的箭头,

    74911

    之解析练习RadioButton+Fragment+viewpager布局架构

    答:一个页面切换的组件,我们可以往里面填充多个View,然后我们可以通过触摸屏幕左右滑动 切换不同的View,和前面学习的ListView一样,我们需要一个Adapter(适配器),将要显示的View和...适配器有责任从容器中删除这个视图。这是为了确保 finishUpdate(viewGroup)返回视图能够被移除。...二.RadioGroup和RadioButton简单介绍 RadioButton即单选按钮,它在开发中提供了一种“多选一”的操作模式,是Android开发中常用的一种组件,例如在用户注册,选择性别只能从...child 所要添加的子视图 index 将要添加子视图的位置 params 所要添加的子视图的布局参数 public void check (int id) 如果传递-1作为指定的选择标识符来清除单选按钮组的勾选状态...listener)注册一个当子内容添加到该视图或者从该视图中移除所要调用的回调函数 listener 当层次结构发生改变所要调用的回调函数 ---- 三.使用效果 ?

    1.3K40

    Swift - Button,Label

    (半透明) button.adjustsImageWhenDisabled = false //使禁用模式下按钮也不会变暗(半透明) // button的处理事件 //...图标按钮,默认文字颜色为蓝色,有触摸的高亮效果 UIButtonType.System:前面不带图标,默认文字颜色为蓝色,有触摸的高亮效果 UIButtonType.Custom:定制按钮,前面不带图标...,默认文字颜色为白色,无触摸的高亮效果 UIButtonType.InfoDark:为感叹号“!”...:触摸控件内拖动 TouchDragOutside:触摸控件外拖动 TouchDragEnter:触摸从控件之外拖动到内部 TouchDragExit:触摸从控件内部拖动到外部 TouchUpInside...:控件之内触摸并抬起事件 TouchUpOutside:控件之外触摸抬起事件 TouchCancel:触摸取消事件,即一次触摸因为放上太多手指而被取消,或者电话打断 */ Swift里Label

    1.7K20
    领券