现在的位置: 首页 > 综合 > 正文

Android MotionEvent 坐标获取

2017年11月20日 ⁄ 综合 ⁄ 共 2432字 ⁄ 字号 评论关闭

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!



Android MotionEvent中getX()与getRawX()都是获取屏幕坐标(横),但二者又有区别

getX()           :   是获取相对当前控件(View)的坐标

getRawX()   :   是获取相对显示屏幕左上角的坐标

演示示例代码

Java代码:

  1. public class MainActivity extends Activity implements OnTouchListener {  
  2.     private Button btn;  
  3.     private int x = 0, y = 0;  
  4.     private int rawX = 0, rawY = 0;  
  5.   
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.main);  
  10.   
  11.         btn = (Button) findViewById(R.id.btn);  
  12.         btn.setOnTouchListener(this);  
  13.     }  
  14.   
  15.     @Override  
  16.     public boolean onTouch(View view, MotionEvent event) {  
  17.         int eventaction = event.getAction();  
  18.   
  19.         switch (eventaction) {  
  20.         case MotionEvent.ACTION_DOWN:  
  21.             break;  
  22.   
  23.         case MotionEvent.ACTION_MOVE:  
  24.             x = (int) event.getX();  
  25.             y = (int) event.getY();  
  26.             rawX = (int) event.getRawX();  
  27.             rawY = (int) event.getRawY();  
  28.               
  29.             Log.e("homer""x = " + x + "; y = " + y + "; rawX = " + rawX + "; rawY = " + rawY);  
  30.             break;  
  31.               
  32.         case MotionEvent.ACTION_UP:  
  33.             break;  
  34.         }  
  35.   
  36.         return false;  
  37.     }  
  38. }  

xml 代码:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     tools:context=".MainActivity" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/txt"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_centerHorizontal="true"  
  12.         android:layout_centerVertical="true"  
  13.         android:text="@string/hello_world" />  
  14.   
  15.     <Button  
  16.         android:id="@+id/btn"  
  17.         android:layout_width="wrap_content"  
  18.         android:layout_height="wrap_content"  
  19.         android:layout_below="@id/txt"  
  20.         android:layout_centerInParent="true"  
  21.         android:text="button me" />  
  22. </RelativeLayout>  

运行结果:



点击屏幕中间的Button,获取的坐标信息:

结果说明:

x,y  :  分别获取的相对Button控件的坐标 getX(), getY()

rawX,rawY  : 分别获取的相对显示屏幕左上角的坐标 getRawX(), getRawY()

总结: 

getX() 是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕); getY(),getRawY()一样的道理

参考推荐:

Android 获取屏幕尺寸与密度

Android的计量单位px,in,mm,pt,dp,dip,sp

Bitmap 之 getPixels() 的 stride

抱歉!评论已关闭.