View事件传递解析,(以ImageView和Buttion为例彻底解析)
来源:互联网 发布:java多线程之间的通信 编辑:程序博客网 时间:2024/06/16 16:57
下载地址:https://github.com/wzqjava/ViewOnclickDemo
以ImageView为例说明View的事件处理机制,ImageView中没有去重写dispatchTouchEvent(ev)
view上的dispatchTouchEvent(ev)方法public boolean dispatchTouchEvent(MotionEvent event) { ... // mOnTouchListener 就是 imageView 调用 setOnTouchListener 传递进来的对象 //onTouch返回值结果由自己重写onTouch决定的,如果返回值为true,那当前if条件满足,直接返回true,即dispatchTouchEvent返回true // dispatchTouchEvent返回true,响应所有事件 // 如果onTouch返回的false,顺序执行 onTouchEvent (event) if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && mOnTouchListener.onTouch(this, event)) { return true; } return onTouchEvent(event);}public void setOnTouchListener(OnTouchListener l) { mOnTouchListener = l;}imageView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.i(tag, "ImageView onTouch event = "+event.getAction()); return true; }});public boolean onTouchEvent(MotionEvent event) { ... //当前控件是否可以被点击,如果可以被点击进入if,返回true,即dispatchTouchEvent(ev)返回true,响应所有事件 //不可以被点击,不进入if,直接返回false,即dispatchTouchEvent(ev)返回false,不响应所有事件 if (((viewFlags & CLICKABLE) == CLICKABLE || (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) { switch (event.getAction()) { case MotionEvent.ACTION_UP: ... //点击事件的调用方式,就是回调方法 performClick(); ... return true; } return false;}//imageView默认没有可点击的事件,但如果添加以下代码,就给其加上了点击事件//其实就是调用View中setOnClickListener方法 public void setOnClickListener(OnClickListener l) { //加上可点击事件 if (!isClickable()) { setClickable(true); } mOnClickListener = l;}imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //在之前的OnTouchListener中的onTouch方法内部返回false,打印两次 }}); public boolean performClick() { .... if (mOnClickListener != null) { ... //回调onclick方法 mOnClickListener.onClick(this); ... } ...}
下载地址:https://github.com/wzqjava/ViewOnclickDemo
0 0
- View事件传递解析,(以ImageView和Buttion为例彻底解析)
- View的事件传递源码详细解析
- View的事件传递源码解析
- View事件解析(下)
- 开源项目源码解析-View 事件传递
- 自定义view重写触摸事件-imageview为例
- Android传递事件解析
- view事件解析(上)
- Android Touch事件传递机制全面解析(从WMS到View树)
- 复杂的json的解析(以和天气的json为例)
- 数组下标越界解析(以C语言为例)
- 训练参数解析-以caffe为例
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上,view)
- 以按键事件为例阐述消息传递机制
- Android View 事件分发机制 源码解析(View篇)
- Android 事件传递机制解析
- Android事件传递机制解析
- 解析 Android 事件传递机制
- 前端构建工具gulpjs的使用介绍及技巧
- sql server2014切换到oracle12c
- android消息机制之子线程更新UI其它方式
- Android Studio导入项目报错 Minimum supported Gradle version is 2.14.1. Current version is 2.10
- Oracle EBS APIs
- View事件传递解析,(以ImageView和Buttion为例彻底解析)
- Tornado中的协程
- Codeforces Round #381 (Div. 2)
- nginx服务器图片防盗链的方法
- IDEA下Maven项目中使用Mybatis及Mybatis Generator
- js 中的window.location.search.match()页面间的传阐述
- Java内部类的一些总结
- 润乾报表下Progress数据库配置与应用
- Hive SQL Syntax for Use with Sentry