首先我們通過一個button進行一下測試,可以知道:
- public class Res extends Activity implements View.OnTouchListener {
- Button btn = null;
- int x = 0;
- int y = 0;
- int rawx = 0;
- int rawy = 0;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- btn = (Button) findViewById(R.id.button);
- btn.setOnTouchListener(this);
- }
- public boolean onTouch(View view, MotionEvent event) {
- int eventaction = event.getAction();
- switch (eventaction) {
- case MotionEvent.ACTION_DOWN:
- break;
- case MotionEvent.ACTION_MOVE:
- x = (int) event.getX();
- y = (int) event.getY();
- rawx = (int) event.getRawX();
- rawy = (int) event.getRawY();
- Log.d(“DEBUG”, “getX=” + x + “getY=” + y + “\n” + “getRawX=” + rawx
- + “getRawY=” + rawy + “\n”);
- break;
- case MotionEvent.ACTION_UP:
- break;
- }
- return false;
- }
- }
getX()是表示Widget相對於自身左上角的x坐標,而getRawX()是表示相對於屏幕左上角的x坐標值(注意:這個屏幕左上角是手機屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一樣的道理如果你的某個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()獲取的值是一樣,還能獲取觸摸標題欄時的坐標位置,但是觸摸狀態欄時的坐標位置不能獲得。
(注:Activity上有兩段寬度:一個是狀態欄,一個是標題欄,每一個寬度都占了25像素)
文章來自:http://ile.me/archives/163.html