Android开发艺术探索(三)——View的事件体系
一、View基础知识
主要介绍内容有:View的位置参数、MotionEvent和TouchSlope对象、VelocityTracker、GestureDetector和Scroller对象
1、什么是View
- View是Android中所有控件的基类
View是一种界面层的控件的一种抽象,它代表了一个控件。
2、View的位置参数
- 四个属性
- top 左上角纵坐标 getRight()
- left 左横 getLeft()
- right 右横 getRight()
- bottom 右纵 getBottom()
- 额外的几个参数
- x View左上角的坐标
- y
- translationX 相对父容器的偏移量
- translationY
- 使用注意
View在平移的过程中,top和left表示的是原始左上角的位置信息,其值并不会发生改变,此时改变的是x,y,translationX和translationY
3、MotionEvent & TouchSlop
- MotionEvent
- 典型的事件类型有
- ACTION_DOWN 手指刚接触屏幕
- ACTION_MOVE 手指在屏幕上移动
- ACTION_UP 手指从屏幕上松开的一瞬间
- getX/getY
- 返回的是当前View左上角的坐标
- getRawX/getRawY
- 返回的是相对于手机屏幕上的坐标
- 典型的事件类型有
- TouchSlop
- 概念
- 是系统所能识别出的被认为是滑动的最小距离 是一个常量,和设备有关
- 获取
- ViewConfiguration.get(getContext()).getScaledTouchSlop();
- 源码位置
frameworks/base/core/res/res/values/config.xml
4、VelocityTracker & GestureDetector & Scroller
- 概念
- VelocityTracker(速度追踪)
- 用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度
- 使用过程
- 在view的onTouchEvent方法中追踪当前单击事件的速度
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event); - 获取当前速度
VelocityTracker.computeCurrentVelocity(1000);
int xVelocity = (int)velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity(); - 不用时,重置并回收内存
velocityTracker.clear();
velocityTracker.recycle();
- 在view的onTouchEvent方法中追踪当前单击事件的速度
- GestureDetector(手势检测)
- 用于检测用户的单击、滑动、长按、双击等行为
- 如何使用?
- 创建一个GestureDetector对象并实现OnGestureListener接口
- 接管目标View的onTouchEvent方法
- 有选择的自行选择 实现OnGestureListener 和 OnDoubleTapListener中的方法
- 常用方法
- onSingleTapUp(单击)
- onFling(快速滑动)
- onScroll(推动)
- onLongPress(长按)
- onDoubleTap(双击)
- Scroller(弹性滑动对象)
- 需要和View的computeScroll方法配合使用
- 固定代码
Android开发艺术探索(三)——View的事件体系的更多相关文章
- Android开发艺术探索笔记——View(二)
Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...
- Android开发艺术探索笔记—— View(一)
Android开发艺术探索笔记 --View(一) View的基础知识 什么是View View是Android中所有控件的基类.是一种界面层控件的抽象. View的位置参数 参数名 获取方式 含义 ...
- 《android开发艺术探索》读书笔记(四)--View工作原理
接上篇<android开发艺术探索>读书笔记(三) No1: View的三大流程:测量流程.布局流程.绘制流程 No2: ViewRoot对应于ViewRootImpl类,它是连接Wind ...
- 《android开发艺术探索》读书笔记(三)--分发机制和滑动冲突
接上篇<android开发艺术探索>读书笔记(二) No1: 通过MotionEvent对象可以得到点击事件发生的x和y坐标,getX/getY返回的是相对于当前View左上角的x和y坐标 ...
- 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...
- 《android开发艺术探索》读书笔记(八)--WindowManager
接上篇<android开发艺术探索>读书笔记(七)--动画 No1: Window是一个抽象类,它的具体实现是PhoneWindow.创建一个Window是很简单的事,只需要通过Windo ...
- Android开发艺术探索第五章——理解RemoteViews
Android开发艺术探索第五章--理解RemoteViews 这门课的重心在于RemoteViews,RemoteViews可以理解为一种远程的View,其实他和远程的Service是一样的,Rem ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- Android开发艺术探索读书笔记——进程间通信
1. 多进程使用场景 1) 应用某些模块由于特殊需求须要执行在单独进程中. 如消息推送,使消息推送进程与应用进程能单独存活,消息推送进程不会由于应用程序进程crash而受影响. 2) 为加大一个应用可 ...
- 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程
第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...
随机推荐
- App在后台运行
App有三种状态: 1. 死亡状态(未打开App); 2. 前台运行状态(打开状态); 3. 后台暂停状态(停止所有动画, 定时器, 多媒体联网等操作) 4. 后台运行状态(后台运行); ------ ...
- App评分
//应用实现评论跳转的两种方法: //第一种: //在iOS6.0前跳转到AppStore评分一般是直接跳转到AppStore评分 //NSString *evaluateString = [NSSt ...
- 利用MSF溢出攻击讲解
msf的强大之处也就不做探讨了,虽然这些东西网上很多.但我想说说我的感受. 这次的演示是在BT5中远程攻击一台win2003 sp2 metasploit是4.3的 需要说明的一点是 现在的BT5中不 ...
- Hibernate save或者persist 后获取主键ID
一个自增长ID的对象被save或者persist后,会返回其主键ID: Department department = new Department(); department.setName(&qu ...
- "NetworkError: 500 Internal Server Error - http://develop.console.aliyun.sinopec.com/ots/ots_queryOtsList.action?state=0"
项目明明开始好好的,报的这个错,错误提示也很少,啥信息都没有,只是明白是服务器报了500,知道是服务器内部错误,但是却没法找不到问题所在.后来突然想到把下面报错的action直接在浏览器运行: htt ...
- HDU 2487 Ugly window
这是切的很痛苦的一道题,自己测试了很多样例却终究不过,中间也做了诸多修改,后来无奈去网上看题解,发现遗漏了一种情况,就是两个窗口可能边框都能看见,但是一个嵌套在另一里面,而我判定是不是 “top wi ...
- ANDROID_MARS学习笔记_S03_005_Geocoder、AsyncTask
一.代码1.xml(1)AndroidManifest.xml <uses-permission android:name="android.permission.ACCESS_FIN ...
- 没做过编译器就是被人欺——从一道变态的i++题猜编译器的行为(表达式从左往右扫描,同一变量相互影响)
首先不要被人蒙了,如果是这样,根本编译不过: int i=1; int b=i+++++i; printf("%d %d\n", b ,i); Mingw报错:error: lva ...
- 17.2.1 Replication Implementation Details 复制实现细节:
17.2 Replication Implementation 复制是基于master server 跟踪所有改变到他的数据库(更新,删除等等)在它的binary log. binary log 作为 ...
- VM Depot 喜迎中国本土开源镜像!
发布于 2014-04-07 作者 陈 忠岳 VM Depot 登陆中国之际,我非常高兴地告诉大家,一批各位耳熟能详的中国本地开源镜像已同时上线!得益于开源社区的大力支持,Ubuntu 麒麟13 ...