MotionEvent的getX(),getY()與getRawX(),getRawY()區別


首先我們通過一個button進行一下測試,可以知道:

 


  1. public class Res extends Activity implements View.OnTouchListener {   
  2.     
  3.     Button btn = null;   
  4.     int x = 0;   
  5.     int y = 0;   
  6.     int rawx = 0;   
  7.     int rawy = 0;   
  8.     
  9.     /** Called when the activity is first created. */  
  10.     @Override  
  11.     public void onCreate(Bundle savedInstanceState) {   
  12.         super.onCreate(savedInstanceState);   
  13.         setContentView(R.layout.main);   
  14.         btn = (Button) findViewById(R.id.button);   
  15.         btn.setOnTouchListener(this);   
  16.     }   
  17.     
  18.     public boolean onTouch(View view, MotionEvent event) {   
  19.         int eventaction = event.getAction();   
  20.         switch (eventaction) {   
  21.         case MotionEvent.ACTION_DOWN:   
  22.             break;   
  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.             Log.d(“DEBUG”“getX=” + x + “getY=” + y + “\n” + “getRawX=” + rawx   
  29.                     + “getRawY=” + rawy + “\n”);   
  30.             break;   
  31.     
  32.         case MotionEvent.ACTION_UP:   
  33.             break;   
  34.         }   
  35.         return false;   
  36.     }   
  37. }  

getX()是表示Widget相對於自身左上角的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像素)

 

文章來自:http://ile.me/archives/163.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM