【Android】【自定义View】MotionEvent getX()和getRawX()的区别
来源:互联网 发布:淘宝网运营模式是 编辑:程序博客网 时间:2024/05/17 18:12
下面是View跟随手指移动的案例,使用 getaowX和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()的值被修正了,所以无需再次赋值.
0 0
- 【Android】【自定义View】MotionEvent getX()和getRawX()的区别
- Android MotionEvent的getX()和getRawX()方法的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别 .
- Android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- 16android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- android MotionEvent中getX()和getRawX()的区别
- log4j详解
- MapReduce基础开发之十二ChainMapper和ChainReducer使用
- 查看数据库里所有表的行数与存储大小
- 逻辑左移、逻辑右移、算术左移、算术右移、循环左移、循环右移
- 使用jquery的wrapAll()和wrap()方法包装元素
- 【Android】【自定义View】MotionEvent getX()和getRawX()的区别
- glide详细资料。
- ionic添加cordova插件-Camera
- 【LeetCode】 448. Find All Numbers Disappeared in an Array
- cocosjs--使用全图后,显示的内容出现一个像素的空隙
- C++ pair 和make_pair
- Unity3D之AssetImporter资源导入器
- Window服务器 - Java进行Mysql数据库备份与还原
- android一个播放视频的组件