MotionEvent的getX()与getRawX()区别

来源:互联网 发布:跳蚤市场源码'' 编辑:程序博客网 时间:2024/05/21 14:07

[java] view plaincopy
  1. public class Res extends Activity implements View.OnTouchListener {     
  2.   
  3.     Button btn = null;     
  4.   
  5.   
  6.     int x = 0;     
  7.   
  8.   
  9.     int y = 0;     
  10.   
  11.   
  12.     int rawx = 0;     
  13.   
  14.   
  15.     int rawy = 0;     
  16.   
  17.   
  18.       
  19.   
  20.   
  21.     /** Called when the activity is first created. */    
  22.   
  23.   
  24.     @Override    
  25.   
  26.   
  27.     public void onCreate(Bundle savedInstanceState) {     
  28.   
  29.   
  30.         super.onCreate(savedInstanceState);     
  31.   
  32.   
  33.         setContentView(R.layout.main);     
  34.   
  35.   
  36.         btn = (Button) findViewById(R.id.button);     
  37.   
  38.   
  39.         btn.setOnTouchListener(this);     
  40.   
  41.   
  42.     }     
  43.   
  44.   
  45.       
  46.   
  47.   
  48.     public boolean onTouch(View view, MotionEvent event) {     
  49.   
  50.   
  51.         int eventaction = event.getAction();     
  52.   
  53.   
  54.         switch (eventaction) {     
  55.   
  56.   
  57.         case MotionEvent.ACTION_DOWN:     
  58.   
  59.   
  60.             break;     
  61.   
  62.   
  63.         case MotionEvent.ACTION_MOVE:     
  64.   
  65.   
  66.             x = (int) event.getX();     
  67.   
  68.   
  69.             y = (int) event.getY();     
  70.   
  71.   
  72.             rawx = (int) event.getRawX();     
  73.   
  74.   
  75.             rawy = (int) event.getRawY();     
  76.   
  77.   
  78.             Log.d(“DEBUG”, “getX=” + x + “getY=” + y + “\n” + “getRawX=” + rawx     
  79.   
  80.   
  81.                     + “getRawY=” + rawy + “\n”);     
  82.   
  83.   
  84.             break;     
  85.   
  86.   
  87.       
  88.   
  89.   
  90.         case MotionEvent.ACTION_UP:     
  91.   
  92.   
  93.             break;     
  94.   
  95.   
  96.         }     
  97.   
  98.   
  99.         return false;     
  100.   
  101.   
  102.     }     
  103.   
  104.   
  105. }    


 

getX()是表示触摸位置相对于自身左上角的x坐标,而getRawX()是表示触摸位置相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一样的道理如果你的某个Activity中实现OnTouchListener接口,需要重写


  1. onTouch(View view,MotionEvent event)  

这个方法,
getRawX()和getRawY()获得的是相对屏幕的位置,getX()和getY()获得的永远是view的触摸位置坐标
(这两个值不会超过view的长度和宽度)。
如果重写Activity的

  1. onTouchEvent(MotionEvent event)  

,这个时候获得的是屏幕点击位置的坐标。event.getX() 与 event.getRawX()获取的值是一样的,event.getY() 与 event.getRawY()获取的值是一样,还能获取触摸标题栏时的坐标位置,但是触摸状态栏时的坐标位置不能获得。
(注:Activity上有两段宽度:一个是状态栏,一个是标题栏,每一个宽度都占了25像素)
0 0