android view中touch的执行顺序
2012-06-13 21:35
225 查看
最近研究android中launcher的源码中DragController中的onTouchEvent在屏幕选中桌面图标并且拖动的情况下会执行,如果不选中的话不会执行。研究源码发现,DragController中有如下代码。
改方法返回值是判断是否拦截touchevent,使得子View不会有DispatchTouchEvent执行,mDragging表示的当前是否在托从中,如果在拖动中,返回true,则拦截touch事件,不传递到子View中,否则不拦截。不拦截的话先执行子View的onTouchEvent,我们注意到OntouchEvent和DisPatchTouchEvent都有布尔型的返回值,如果返回true,则代表此次的MotionEvent执行完毕,重新开始从父View中获取MotionEvent并且执行。
public boolean onInterceptTouchEvent(MotionEvent ev) { if (false) { Log.d(Launcher.TAG, "DragController.onInterceptTouchEvent " + ev + " mDragging=" + mDragging); } final int action = ev.getAction(); if (action == MotionEvent.ACTION_DOWN) { recordScreenSize(); } final int screenX = clamp((int)ev.getRawX(), 0, mDisplayMetrics.widthPixels); final int screenY = clamp((int)ev.getRawY(), 0, mDisplayMetrics.heightPixels); switch (action) { case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_DOWN: // Remember location of down touch mMotionDownX = screenX; mMotionDownY = screenY; mLastDropTarget = null; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: if (mDragging) { drop(screenX, screenY); } endDrag(); break; } JbcaoLog.VLOG("dragcontroller onInterceptTouchEvent return "+mDragging); return mDragging; }
改方法返回值是判断是否拦截touchevent,使得子View不会有DispatchTouchEvent执行,mDragging表示的当前是否在托从中,如果在拖动中,返回true,则拦截touch事件,不传递到子View中,否则不拦截。不拦截的话先执行子View的onTouchEvent,我们注意到OntouchEvent和DisPatchTouchEvent都有布尔型的返回值,如果返回true,则代表此次的MotionEvent执行完毕,重新开始从父View中获取MotionEvent并且执行。
相关文章推荐
- Android View系统源码分析(五)—— View.onTouchEvent()默认执行方式
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
- Android中view的Touch事件传递顺序
- 从源码角度带你分析 Android View 事件分发 dispatchTouchEvent,onTouch,onTouchEvent,onClick逻辑顺序过程(一)
- android显示view时各回调函数执行顺序
- Android对touch事件的拦截,在View Tree上的传递顺序
- android学习12——重载SurfaceView一些方法的执行顺序
- Android 之 View线程 run方法和draw方法执行的先后顺序
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
- android中程序的执行顺序
- android编程代码执行顺序
- Android源码解析ViewGroup的touch事件分发机制
- 自定义控件(视图)2期笔记14:自定义视图之View事件分发 dispatchTouchEvent,onTouch,onTouchEvent,onClick逻辑顺序过程
- Android中WebView加载H5页面JS不执行的问题
- Android多个Activity切换时其生命周期中的方法执行顺序
- Android 之在View以及ViewGroup中Touch事件传递
- Android WebView执行GPU命令的过程分析
- Android - HorizontalScrollView(ViewPager) within ScrollView Touch Handling
- android ViewGroup的onInterceptTouchEvent 和 onTouchEvent事件