Android onInterceptTouchEvent与onTouchEvent调用关系
来源:互联网 发布:淘宝客服销售案例 编辑:程序博客网 时间:2024/06/14 23:21
概述
onInterceptTouchEvent()是用来拦截Touch事件,ViewGroup有,View没有,onTouchEvent()是Touch事件,ViewGroup与View都有。
实例讲解
当一个Touch事件发生后,会由父布局开始依次执行onInterceptTouchEvent(),如果都没有拦截,则一直往下传,直到底层的View,调用onTouchEvent(),如果一直没有消费,则再依次往上传。
自定义Layout:
package com.whu.touchevent;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.widget.LinearLayout;/** * Created by Fly on 2016/10/26. */public class MyLayout extends LinearLayout{ private static final String TAG = "MyLayout"; public MyLayout(Context context) { super(context); } public MyLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: Log.i(TAG, "onInterceptTouchEvent: " + "action down"); break; case MotionEvent.ACTION_MOVE: Log.i(TAG, "onInterceptTouchEvent: " + "action move"); case MotionEvent.ACTION_UP: Log.i(TAG, "onInterceptTouchEvent: " + "action up"); break; } return false; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: Log.i(TAG, "onTouchEvent: " + "action down"); break; case MotionEvent.ACTION_MOVE: Log.i(TAG, "onTouchEvent: " + "action move"); break; case MotionEvent.ACTION_UP: Log.i(TAG, "onTouchEvent: " + "action up"); break; } return false; }}
自定义View:
package com.whu.touchevent;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.widget.Button;/** * Created by Fly on 2016/10/26. */public class MyView extends Button{ private static final String TAG = "MyView"; public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: Log.i(TAG, "onTouchEvent: " + "action down"); break; case MotionEvent.ACTION_MOVE: Log.i(TAG, "onTouchEvent: " + "action move"); break; case MotionEvent.ACTION_UP: Log.i(TAG, "onTouchEvent: " + "action up"); break; } return true; }}
- layout的onInterceptTouchEvent和onTouchEvent都返回false,view的onTouchEvent返回false
10-26 15:33:43.241 4897-4897/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action down10-26 15:33:43.241 4897-4897/com.whu.touchevent I/MyView: onTouchEvent: action down10-26 15:33:43.241 4897-4897/com.whu.touchevent I/MyLayout: onTouchEvent: action down
layout没有拦截,走到view的ontouch,view没有消费,继续走,走到layout的ontouch,依然没有消费,继续向上。
2. layout的onInterceptTouchEvent和onTouchEvent都返回false,view的onTouchEvent返回true
10-26 15:38:42.885 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action down10-26 15:38:42.885 11983-11983/com.whu.touchevent I/MyView: onTouchEvent: action down10-26 15:38:42.933 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action move10-26 15:38:42.933 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action up10-26 15:38:42.933 11983-11983/com.whu.touchevent I/MyView: onTouchEvent: action move10-26 15:38:42.949 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action move10-26 15:38:42.949 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action up10-26 15:38:42.949 11983-11983/com.whu.touchevent I/MyView: onTouchEvent: action move10-26 15:38:42.957 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action move10-26 15:38:42.957 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action up10-26 15:38:42.957 11983-11983/com.whu.touchevent I/MyView: onTouchEvent: action move10-26 15:38:42.965 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action move10-26 15:38:42.965 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action up10-26 15:38:42.965 11983-11983/com.whu.touchevent I/MyView: onTouchEvent: action move10-26 15:38:42.966 11983-11983/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action up10-26 15:38:42.966 11983-11983/com.whu.touchevent I/MyView: onTouchEvent: action up
可以看到,如果view消费了这个touch(onTouchEvent返回true),则每次都会像父布局的onInterceptTouchEvent判断是否拦截了。
3. layout的onInterceptTouchEvent返回true,layout的onTouchEvent返回false
10-26 15:41:13.790 20170-20170/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action down10-26 15:41:13.790 20170-20170/com.whu.touchevent I/MyLayout: onTouchEvent: action down
拦截了后就不会向View传递了,但是并没有消费,所以只有down事件传递进去
4. layout的onInterceptTouchEvent和onTouchEvent都返回true
10-26 15:43:34.204 25353-25353/com.whu.touchevent I/MyLayout: onInterceptTouchEvent: action down10-26 15:43:34.204 25353-25353/com.whu.touchevent I/MyLayout: onTouchEvent: action down10-26 15:43:34.272 25353-25353/com.whu.touchevent I/MyLayout: onTouchEvent: action move10-26 15:43:34.287 25353-25353/com.whu.touchevent I/MyLayout: onTouchEvent: action move10-26 15:43:34.295 25353-25353/com.whu.touchevent I/MyLayout: onTouchEvent: action move10-26 15:43:34.304 25353-25353/com.whu.touchevent I/MyLayout: onTouchEvent: action move10-26 15:43:34.312 25353-25353/com.whu.touchevent I/MyLayout: onTouchEvent: action move10-26 15:43:34.320 25353-25353/com.whu.touchevent I/MyLayout: onTouchEvent: action move10-26 15:43:34.320 25353-25353/com.whu.touchevent I/MyLayout: onTouchEvent: action up
拦截并且消费,则down、move、up都被消费。
0 0
- Android onInterceptTouchEvent与onTouchEvent调用关系
- onInterceptTouchEvent与onTouchEvent关系
- Android onInterceptTouchEvent与onTouchEvent的调用时序
- onInterceptTouchEvent和onTouchEvent调用关系
- 【android】onInterceptTouchEvent与onTouchEvent
- [Android实例] onInterceptTouchEvent和onTouchEvent调用关系详解
- Android事件dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent、OnTouchListener调用关系
- onInterceptTouchEvent和onTouchEvent调用关系详解
- onInterceptTouchEvent和onTouchEvent调用关系详解
- onInterceptTouchEvent和onTouchEvent的调用关系
- onInterceptTouchEvent和onTouchEvent调用关系详解
- onInterceptTouchEvent和onTouchEvent调用关系详解
- onInterceptTouchEvent和onTouchEvent调用关系详解
- onInterceptTouchEvent和onTouchEvent调用关系详解
- Android中onInterceptTouchEvent与onTouchEvent
- Android中onInterceptTouchEvent与onTouchEvent
- android-onInterceptTouchEvent()与onTouchEvent() - 随心
- Android中onInterceptTouchEvent与onTouchEvent
- 【C++】【啊哈!算法】Dijkstra算法
- linux下安装redis服务和php扩展redis
- Centos7 常用操作
- 《自己动手设计数据库》第9章 字段说明
- Qt model/View
- Android onInterceptTouchEvent与onTouchEvent调用关系
- xcode 真机调试报错(一)
- 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (二):负载均衡器的设计与实现
- 数据结构--基本排序算法(js版)
- Mantle--国外程序员最常用的iOS模型&字典转换框架
- RKSwipeBetweenViewControllers
- android 使用到的各种工具类
- 用户和用户组进阶命令
- iOS防止Button连续点击