336_ViewGroup的dispatchTouchEvent
来源:互联网 发布:小蚂蚁微信编辑器源码 编辑:程序博客网 时间:2024/05/01 15:46
ViewGroup的dispatchTouchEvent
阅读郭霖大神笔记
博客地址:http://blog.csdn.net/sinyu890807/article/details/9097463
public boolean dispatchTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
final float xf = ev.getX();
final float yf = ev.getY();
final float scrolledXFloat = xf + mScrollX;
final float scrolledYFloat = yf + mScrollY;
final Rect frame = mTempRect;
boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0;
if (action == MotionEvent.ACTION_DOWN) {
if (mMotionTarget != null) {
mMotionTarget = null;
}
if (disallowIntercept || !onInterceptTouchEvent(ev)) {
ev.setAction(MotionEvent.ACTION_DOWN);
final int scrolledXInt = (int) scrolledXFloat;
final int scrolledYInt = (int) scrolledYFloat;
final View[] children = mChildren;
final int count = mChildrenCount;
for (int i = count - 1; i >= 0; i--) {
final View child = children[i];
if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE
|| child.getAnimation() != null) {
child.getHitRect(frame);
if (frame.contains(scrolledXInt, scrolledYInt)) {
final float xc = scrolledXFloat - child.mLeft;
final float yc = scrolledYFloat - child.mTop;
ev.setLocation(xc, yc);
child.mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;
if (child.dispatchTouchEvent(ev)) {
mMotionTarget = child;
return true;
}
}
}
}
}
}
boolean isUpOrCancel = (action == MotionEvent.ACTION_UP) ||
(action == MotionEvent.ACTION_CANCEL);
if (isUpOrCancel) {
mGroupFlags &= ~FLAG_DISALLOW_INTERCEPT;
}
final View target = mMotionTarget;
if (target == null) {
ev.setLocation(xf, yf);
if ((mPrivateFlags & CANCEL_NEXT_UP_EVENT) != 0) {
ev.setAction(MotionEvent.ACTION_CANCEL);
mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;
}
return super.dispatchTouchEvent(ev);
}
if (!disallowIntercept && onInterceptTouchEvent(ev)) {
final float xc = scrolledXFloat - (float) target.mLeft;
final float yc = scrolledYFloat - (float) target.mTop;
mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;
ev.setAction(MotionEvent.ACTION_CANCEL);
ev.setLocation(xc, yc);
if (!target.dispatchTouchEvent(ev)) {
}
mMotionTarget = null;
return true;
}
if (isUpOrCancel) {
mMotionTarget = null;
}
final float xc = scrolledXFloat - (float) target.mLeft;
final float yc = scrolledYFloat - (float) target.mTop;
ev.setLocation(xc, yc);
if ((target.mPrivateFlags & CANCEL_NEXT_UP_EVENT) != 0) {
ev.setAction(MotionEvent.ACTION_CANCEL);
target.mPrivateFlags &= ~CANCEL_NEXT_UP_EVENT;
mMotionTarget = null;
}
return target.dispatchTouchEvent(ev);
}
总结:
先到ViewGroup,intercept是否拦截?
如果true,那么就是拦截,
就执行ViewGroup的onTouch
如果false,那么就是不拦截
就执行View的onTouch.
0 0
- 336_ViewGroup的dispatchTouchEvent
- 335_ViewGroup
- view的dispatchTouchEvent方法
- DispatchTouchEvent的简单运用
- ViewGroup的dispatchTouchEvent理解
- ViewGroup的dispatchTouchEvent总结
- View的dispatchTouchEvent总结
- dispatchTouchEvent
- dispatchTouchEvent
- dispatchTouchEvent
- android的dispatchTouchEvent onInterceptTouchEvent onTouchEvent
- onTouchEvent dispatchTouchEvent interceptTouchEvnet 之间的传递
- Android中dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent的理解
- Android中dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent的详解
- Android中dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent的理解
- Android中dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent的理解
- Android中dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent的理解
- Android中dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent的详解
- [矩阵快速幂/推函数式]Codeforces185A Plant
- 神奇的程序
- 335_ViewGroup
- 胜利大逃亡hdu1253三维bfs
- LOL因为代理登录失败的问题
- 336_ViewGroup的dispatchTouchEvent
- 如何将span 元素设置成有高度宽度的块元素
- 集合:接口Set
- 红色标重点,蓝色分列表,紫色经验区
- 337_图片轮播器使用button
- Android开发中的动画(下)--属性动画Property Animation
- Caffe 在自己的数据库上训练步骤
- line-height 的作用
- hdu5826physics+数学积分