Touch事件的传递机制?

原创 2016年08月28日 16:17:20

 关于Touch事件的传递机制,可以由以下几个问题分析 : 

      1、一个完整的touch事件由哪几个构成;

2、touch事件在父控件和子控件之间是怎么传递的;

3、滑动冲突的解决方法有几种。


    一个完整的touch事件,由一个down事件、n个move事件,一个up事件组成。touch事件一般的传递流程Activity------>window(唯一实现类是PhoneWindow)------>顶级View(DecorView)-------->ViewGroup------->View。


对于具有View的父控件(ViewGroup)与子控件(View)的传递机制: 当对子控件进行点击执行Touch事件时, 由父控件首先获取Touch事件执行分发事件dispatchTouchEvent(), 默认将事件分发处理; 接着开始调用父控件的拦截事件(处理拦截孩子的事件)onInterceptTouchEvent(),

(1)默认对孩子做不拦截处理(对于点击孩子的Touch事件交由孩子自己处理),在拦截事件中默认返回false;直接交给孩子自己处理,由子控件开始执行自身的分发事件dispatchTouchEvent(),默认分发并执行自身的onTouchEvent();(ACTION_DOWN ACTION_MOVE ACTION_UP) ; 子控件若选择消费事件,对Touch进行处理,则在方法中做出相应处理后返回true; 若子控件返回false则代表对Touch事件不做处理,这时事件会返回父控件交由父控件的onTouchEvent()去处理,由父控件选择处不处理,事件最终都以某一部分在onTouchEvent()方法中返回true表示事件传递结束;

  (2) 若在onInterceptTouchEvent()中对孩子进行拦截处理,则事件直接交给父控件的onTouchEvent()进行处理,孩子的所用方法都不会被调用,对于Touch事件也不会做任何处理


 滑动冲突的常见场景及处理原则
  方向不同。如ViewPager里面嵌套ListView。-------->判断左右滑动的绝对值和上下滑动的绝对值的大小,往大的那端动。 

方向相同。如ViewPager嵌套ViewPager-------->

1外部拦截法,重写外部ViewPager的onIntercepterTouchEvent()和onTouchEvent()方法,拦截某些时候不让子ViewPager获取touch事件。 

 2内部拦截法,重写内部ViewPager的onIntercepterTouchEvent()和onTouchEvent(),并调用parent.requestDissallowIntercepterTouchEvent(boolen disallowIntercepter)方法请求父控件拦截。

彻底掌握Android的Touch触摸事件传递机制

目录 一、Touch基本知识 二、Android事件传递流程: 流程图胜千言 流程图原理,对流程图的具体解释: 三、如何写自定义touch事件: 处理一个手指: 处理多个手指: 四...
  • a_long_
  • a_long_
  • 2016年08月05日 00:11
  • 2877

Android TouchEvent事件传递机制

跟touch事件相关的3个方法: public boolean dispatchTouchEvent(MotionEvent ev);    //用来分派event public boolean on...
  • morgan_xww
  • morgan_xww
  • 2013年07月18日 19:41
  • 43331

Android Touch事件传递机制详解 上

最近总是遇到关于Android Touch事件的问题,如:滑动冲突的问题,以前也花时间学习过Android Touch事件的传递机制,可以每次用起来的时候总是忘记了,索性自己总结一下写篇文章避免以后忘...
  • yuanzeyao2008
  • yuanzeyao2008
  • 2014年07月19日 15:37
  • 7654

Android Touch事件传递机制

转载:http://www.trinea.cn/android/touch-event-delivery-mechanism/ 个人建议:直接阅读英文原版 介绍Android Touch事...
  • THEONE10211024
  • THEONE10211024
  • 2015年01月29日 14:06
  • 1130

Android Touch事件传递机制引发的血案

通过一个使用SlideMenu过程中,无法滑动SlideMenu的问题,详细描述了Android TouchEvent的传递机制...
  • yuanzeyao2008
  • yuanzeyao2008
  • 2014年08月30日 11:53
  • 2847

Touch事件传递机制解析

dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent
  • cai_iac
  • cai_iac
  • 2017年03月01日 16:49
  • 425

android Touch事件传递机制

  • 2015年01月26日 17:33
  • 4.76MB
  • 下载

Touch事件的传递机制?

关于Touch事件的传递机制,可以由以下几个问题分析 :        1、一个完整的touch事件由哪几个构成; 2、touch事件在父控件和子控件之间是怎么传递的; 3、滑动冲突的解决方...
  • jackyCoder
  • jackyCoder
  • 2016年08月28日 16:17
  • 602

onTouch事件的传递机制

onTouch事件的传递机制一、点击事件传递机制: 1.view执行dispatchTouchEvent 方法,开始分发事件,返回值决定是否分发出去 2.执行onInterceptHoverEvent...
  • sinat_34383316
  • sinat_34383316
  • 2017年07月16日 12:22
  • 124

Touch事件的传递机制

TouchEventTouchEvent 分三种事件:down、move、up。 其中move事件在一个操作中(这里说的一个操作就是用户与屏幕的交互,即由down到up的动作序列)可能会发生多次。 ...
  • qq_32890771
  • qq_32890771
  • 2017年08月03日 22:59
  • 86
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Touch事件的传递机制?
举报原因:
原因补充:

(最多只允许输入30个字)