Android Touch事件传递
来源:互联网 发布:帝国cms城市切换 编辑:程序博客网 时间:2024/04/29 14:32
android系统中每个ViewGroup的子类都具有下面3个和TouchEvent处理相关的方法:
1. dispatchTouchEvent(MotionEvent ev) 在Activity中可以看到
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
onUserInteraction();
}
if (getWindow().superDispatchTouchEvent(ev)) {
return true;
}
return onTouchEvent(ev);
}
这个方法是从父类Window的 dispatchTouchEvent(MotionEvent ev)传递过来的,根据返回值,确定事件的分发
2.在ViewGroup中独有的方法 onInterceptTouchEvent(MotionEvent ev) :
public boolean onInterceptTouchEvent(MotionEvent ev)
这个方法的返回值决定了是否拦截触摸事件,当返回true便交给自己的
onTouchEvent(MotionEvent ev)去处理,false就继续向下,传递给子孩子
3.public boolean onTouchEvent(MotionEvent ev):
一般我们用于重写此方法处理响应的点击事件,返回值决定是否消耗此事件,true表示消耗此事件
false表示继续传递
事件传递过程:
通过重写onInterceptTouchEvent以及onTouchEvent达到不处理点击事件,进行事件的传递,以下是
自定义ViewPager示例代码:
package com.cf.zhbj.view;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;/** * Created by chenfan on 2016/7/17. * 禁止滑动的ViewPager */public class NoScrollViewPager extends ViewPager { public NoScrollViewPager(Context context) { super(context); } public NoScrollViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent ev) { //重写父类onTouchEvent,拦截触摸操作 return true; } //事件中断,拦截 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { //true将此事件拦截,false不拦截 //标签页的ViewPager不拦截内部子控件ViewPager return false; }}
当子控件不希望父控件以及父控件的上层拦截时候可以使用如下示例代码:
//事件处理:dispatchTouchEvent->onInterceptceptTouchEvent->onTouchEvent //事件分发 @Override public boolean dispatchTouchEvent(MotionEvent ev) { //请求父控件和祖宗控件(父控件的父控件...)不要拦截事件 getParent().requestDisallowInterceptTouchEvent(true); return super.dispatchTouchEvent(ev); }
- android touch事件传递
- Android Touch事件传递
- Android touch事件传递
- Android touch 事件传递
- Android Touch事件传递
- Android Touch事件传递
- Android Touch事件传递机制
- Android Touch事件传递机制
- android keydown touch事件传递
- Android Touch事件传递机制
- Android Touch事件传递机制
- Android Touch事件传递机制
- Android Touch事件传递机制
- Android Touch事件传递机制
- Android Touch事件传递机制
- Android Touch事件传递机制
- Android Touch事件传递机制
- Android Touch事件传递机制
- 上传Excel表格转List处理
- 文章标题
- Websocket 协议解析
- IOS学习笔记-关闭键盘的两种方式
- Java类被动使用的几种情况
- Android Touch事件传递
- JS对象及其方法-数组
- 颜色表示:HSB,Lab,RGB,CMYK与十六进制表示法
- 69. Sqrt(x)
- android 数据双向绑定学习笔记
- com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
- 将excel转换成pdf格式的方法
- 数学有什么用处?看完后恍然大悟!
- Linux 文件锁