Android滑动事件冲突详解(一)_Android

首先,我们假设这样一个场景:一个ViewPager里面嵌套一个ViewPager,内部滑动方向和外部滑动方向一样时,该怎么解决这一冲突呢?
针对滑动冲突这里给出两种解决方案:外部拦截法,内部拦截法。

外部拦截法
外部拦截法是指点击事件都先经过父容器的拦截处理,如果父容器需要此拦截事件,就拦截,不需要就不拦截,这种方法比较符合点击事件的分发机制。这种方法代码如下:

@Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {

    ...
    boolean intercepted=false;
    switch (action) {
      case MotionEvent.ACTION_MOVE:
        intercepted=false;
        break;
      case MotionEvent.ACTION_MOVE:
        if(父容器需要处理此事件)
          intercepted=true;
        else
          intercepted=false;
        break;
      case MotionEvent.ACTION_UP: {
        intercepted=false;
        break;
    }

    ...
    return intercepted;
  }

上述代码是外部拦截的典型逻辑,只需要重写onInterceptTouchEvent()方法,修改父容器当前需要的事件即可。 

内部拦截法
内部拦截法是指:父容器不拦截任何事件,所有事件都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交由父容器处理。这种方法与Android中的事件分发机制不一致,需要配合 requestDisallowInterceptTouchEvent()方法才能正常工作。我们需要重写子元素的,代码如下:

public boolean dispatchTouchEvent(MotionEvent event) {
    ...

    switch (action) {
      case MotionEvent.ACTION_MOVE:
            getParent().requestDisallowInterceptTouchEvent(true);

        break;
      case MotionEvent.ACTION_MOVE:
        if(子元素需要处理此事件)
              getParent().requestDisallowInterceptTouchEvent(true);

        break;
      case MotionEvent.ACTION_UP: {
        break;
    }
    ...
    return super.dispatchTouchEvent(event);
;
  }

当然,还需要修改父容器的onInterceptTouchEvent()方法,代码如下:

@Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {

      int action=ev.getAction();
      if(action==MotionEvent.ACTION_DOWN){
        return false;
      }else {
        return true;
      }
    }

以上就是两种解决滑动冲突的解决方案,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
滑动事件
android滑动事件冲突、滑动和点击事件冲突、listview滑动事件冲突、js滑动和点击事件冲突、android 滑动冲突,以便于您获取更多的相关知识。

时间: 2024-08-09 01:36:18

Android滑动事件冲突详解(一)_Android的相关文章

Android滑动事件冲突详解(一)

首先,我们假设这样一个场景:一个ViewPager里面嵌套一个ViewPager,内部滑动方向和外部滑动方向一样时,该怎么解决这一冲突呢? 针对滑动冲突这里给出两种解决方案:外部拦截法,内部拦截法. 外部拦截法 外部拦截法是指点击事件都先经过父容器的拦截处理,如果父容器需要此拦截事件,就拦截,不需要就不拦截,这种方法比较符合点击事件的分发机制.这种方法代码如下: @Override public boolean onInterceptTouchEvent(MotionEvent ev) { ..

Android View事件传递详解

一.View的dispatchTouchEvent和onTouchEvent 探讨Android事件传递机制前,明确android的两大基础控件类型:View和ViewGroup.View即普通的控件,没有子布局的,如Button.TextView. ViewGroup继承自View,表示可以有子控件,如Linearlayout.Listview这些.而事件即MotionEvent,最重要的有3个: (1)MotionEvent.ACTION_DOWN  按下View,是所有事件的开始 (2)M

ontochevent事件冲突-android onTochEvent事件冲突

问题描述 android onTochEvent事件冲突 我自定义了一个布局,然后重写了它的onTochEvent方法,然后自定义了一个View, view被自定义的布局引用,同时也重写了当前的view的ontochevent方法,然后发现两个事件冲突了请问怎么解决 解决方案 Android之ListView和ScrollView事件冲突android 事件分发与滑动冲突android 滑动事件冲突解决 解决方案二: 重写布局的onInterceptTouchEvent方法,控制什么情况下拦截t

Android 事件分发详解及示例代码_Android

事件分发是Android中非常重要的机制,是用户与界面交互的基础.这篇文章将通过示例打印出的Log,绘制出事件分发的流程图,让大家更容易的去理解Android的事件分发机制. 一.必要的基础知识 1.相关方法 Android中与事件分发相关的方法主要包括dispatchTouchEvent.onInterceptTouchEvent.onTouchEvent三个方法,而事件分发一般会经过三种容器,分别为Activity.ViewGroup.View.下表对这三种容器分别拥有的事件分发相关方法进行

Android编程输入事件流程详解_Android

本文实例讲述了Android编程输入事件流程.分享给大家供大家参考,具体如下: EventHub对输入设备进行了封装.输入设备驱动程序对用户空间应用程序提供一些设备文件,这些设备文件放在/dev/input里面. EventHub扫描/dev/input下所有设备文件,并打开它们. bool EventHub::openPlatformInput(void) { ... mFDCount = 1; mFDs = (pollfd *)calloc(1, sizeof(mFDs[0])); mDev

Android 手势操作编程详解_Android

      手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢?        手势操作原理        首先,在Android系统中,每一次手势交互都会依照以下顺序执行.        1. 接触接触屏一刹那,触发一个MotionEvent事件.        2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象.        3

Android ListView的OnItemClickListener详解_Android

我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener.本文主要在于对OnItemClickListener的position和id参数做详细的解释,我相信有些人在这上面走了些弯路. 先来看一下官方的文档 position The position of the view in the adapter. id The row id of the item that was click

Android实现动画效果详解_Android

目前Android平台提供了两类动画一类是Tween动画,第二类就是 Frame动画,具体内容介绍请看下文: 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 实现动画有两种方式:一种使用XML文件(文件放在res/anim),一种直接代码搞定  1.透明度控制动画效果alpha <!-- 透明度控制动画效果alpha 浮点型值: fromAlpha 动画起始时透明

Android Matrix源码详解_Android

Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.Android中的Matrix是一个3 x 3的矩阵,其内容如下:  Matrix的对图像的处理可分为四类基本变换: Translate           平移变换 Rotate                旋转变换 Scale                  缩放变换 Skew                  错切变换 从字面上理解,矩阵中的MSCALE用于处理缩放变换,MS