【Android】【自定义View】MotionEvent getX()和getRawX()的区别
2016-12-27 11:32
441 查看
下面是View跟随手指移动的案例,使用 getaowX和getX 两种获取坐标的方式
先是 getRawX()的方式
再是getX()的方式
发现了 getRawX的方式比getX的方式,在Move中多了一步赋值,即:
lastX = x;
lastY = y;
可是完成的效果确实一样,这是为什么呢?
其实是这样的
getRawX:触摸点相对于屏幕的坐标
getX: 触摸点相对于按钮的坐标
可以这么认为:getRawX获取的是绝对坐标,而getX获取的是相对坐标
在getX()的做法里面,
layout(
getLeft() + dx,
getTop() + dy,
getRight() + dx,
getBottom() + dy
);
之后,view发生了位移,下一次getX()的值被修正了,所以无需再次赋值.
先是 getRawX()的方式
@Override public boolean onTouchEvent(MotionEvent event) { float x = event.getRawX(); float y = event.getRawY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = x; lastY = y; break; case MotionEvent.ACTION_MOVE: int dx = (int) (x - lastX); int dy = (int) (y - lastY); layout( getLeft() + dx, getTop() + dy, getRight() + dx, getBottom() + dy ); lastX = x; lastY = y; break; case MotionEvent.ACTION_UP: break; } return true; }
再是getX()的方式
@Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = x; lastY = y; break; case MotionEvent.ACTION_MOVE: int dx = (int) (x - lastX); int dy = (int) (y - lastY); layout( getLeft() + dx, getTop() + dy, getRight() + dx, getBottom() + dy ); break; case MotionEvent.ACTION_UP: break; } return true; }
发现了 getRawX的方式比getX的方式,在Move中多了一步赋值,即:
lastX = x;
lastY = y;
可是完成的效果确实一样,这是为什么呢?
其实是这样的
getRawX:触摸点相对于屏幕的坐标
getX: 触摸点相对于按钮的坐标
可以这么认为:getRawX获取的是绝对坐标,而getX获取的是相对坐标
在getX()的做法里面,
layout(
getLeft() + dx,
getTop() + dy,
getRight() + dx,
getBottom() + dy
);
之后,view发生了位移,下一次getX()的值被修正了,所以无需再次赋值.
相关文章推荐
- android MotionEvent中getX()和getRawX()的区别
- Android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent getX getRawX getScrollX 的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- Android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别 .
- Android MotionEvent的getX()和getRawX()方法的区别
- MOTIONEVENT的GETX()和GETRAWX()和VIEW的GETLEFT()3个方法的区别
- MotionEvent中getX()和getRawX()的区别
- Android MotionEvent中getX()和getRawX()区别以及View坐标getLeft(),getTop()一点理解
- MotionEvent中getX()和getRawX()的区别
- MotionEvent中的getRawX()和getX()和getLeft()的区别
- MotionEvent中getX()和getRawX()的区别
- 关于Android自定义View中的onTouchEvent(MotionEvent event)事件监听
- MotionEvent的getX(),getY()与getRawX(),getRawY()区别
- MotionEvent getX()和getRawX()的区别。
- MotionEvent中getX()和getRawX()的区别
- MotionEvent中getX()跟getRawX()的区别