展会信息港展会大全

android view中touch的执行顺序
来源:互联网   发布日期:2015-09-29 10:34:44   浏览:1718次  

导读:最近研究android中launcher的源码中DragController中的onTouchEvent在屏幕选中桌面图标并且拖动的情况下会执行,如果不选中的话不会执行。研究源码发现,DragController中有如下代码。public boolean onInterce......

最近研究android中launcher的源码中DragController中的onTouchEvent在屏幕选中桌面图标并且拖动的情况下会执行,如果不选中的话不会执行。研究源码发现,DragController中有如下代码。

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并且执行。

赞助本站

人工智能实验室

相关热词: view touch 顺序

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港