getX和getRawX
2016-03-21 13:30
225 查看
今天在做一个关于拖动button的小demo,看到里面有getX和getRawX。就写了个测试来看看两者有什么区别。
布局文件就一个button
代码如下:
getX()是表示组件相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕)
如果你的某个Activity中实现OnTouchListener接口,需要重写onTouch(View view,MotionEvent event) 这个方法,getRawX()和getRawY()获得的是相对屏幕的位置,getX()和getY()获得的永远是view的触摸位置坐标(这两个值不会超过view的长度和宽度)。
当然,如果重写Activity的onTouchEvent(MotionEvent event) ,这个时候获得的是屏幕点击位置的坐标。event.getX() 与 event.getRawX()获取的值是一样的,event.getY() 与 event.getRawY()获取的值是一样
下面简单来讲讲onTouch和onTouchEvent的区别
onTouch:属于某个组件的OnTouchListener接口,点击组件有效
onTouchEvent:属于Activity,点击全屏幕有效
onTouchEvent可以用来实现雷霆战机之类的游戏的飞机移动的效果
布局文件就一个button
代码如下:
button.setOnTouchListener(new OnTouchListener() { int lastX, lastY; @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int l = v.getLeft() + dx; int b = v.getBottom() + dy; int r = v.getRight() + dx; int t = v.getTop() + dy; if (l < 0) { l = 0; r = l + v.getWidth(); } if (t < 0) { t = 0; b = t + v.getHeight(); } if (r > width) { r = width; l = r - v.getWidth(); } if (b > height) { b = height; t = b - v.getHeight(); } v.layout(l, t, r, b); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); v.postInvalidate(); break; case MotionEvent.ACTION_UP: // Log.i("getRawX", (int)event.getRawX()+""); // Log.i("getRawY", (int)event.getRawY()+""); // Log.i("getX", (int)event.getX()+""); // Log.i("getY", (int)event.getY()+""); // Log.i("getWidth", v.getWidth()+""); // Log.i("getHeight", v.getHeight()+""); break; } return false; } });
getX()是表示组件相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕)
如果你的某个Activity中实现OnTouchListener接口,需要重写onTouch(View view,MotionEvent event) 这个方法,getRawX()和getRawY()获得的是相对屏幕的位置,getX()和getY()获得的永远是view的触摸位置坐标(这两个值不会超过view的长度和宽度)。
当然,如果重写Activity的onTouchEvent(MotionEvent event) ,这个时候获得的是屏幕点击位置的坐标。event.getX() 与 event.getRawX()获取的值是一样的,event.getY() 与 event.getRawY()获取的值是一样
下面简单来讲讲onTouch和onTouchEvent的区别
onTouch:属于某个组件的OnTouchListener接口,点击组件有效
onTouchEvent:属于Activity,点击全屏幕有效
onTouchEvent可以用来实现雷霆战机之类的游戏的飞机移动的效果
相关文章推荐
- cocoapods_安装Ruby运行环境
- Interview Questions and Ans
- java的静态导入
- PHP 环境安装
- [bzoj3143] [Hnoi2013]游走
- 互联网架构设计之Redis篇-【Redis Windows版本安装过程】
- CF 349 C. Dominoes 贪心吧
- Ubuntu文件浏览器 - 开发Scope/应用利器
- Java开发十大必备网站
- Linux企业运维高效技巧心得及分享
- 青春是块原料--那个女孩
- ( C++) Access the hard drive.
- openssl工具列表
- error1058
- 经典算法整理之选择排序
- ios网络编程(http、socket)
- 编写,其实就是copy出来驱动程序,pass
- CROC 2016 - Elimination Round (Rated Unofficial Edition) D. Robot Rapping Results Report 二分+拓扑排序
- where T:class 泛型类型约束
- 使用animation填充Activity切换动画