Android Event.getX 与getRawX的区别

public class Res extends Activity implements View.OnTouchListener {    

    Button btn = null;    
    int x = 0;    
    int y = 0;    
    int rawx = 0;    
    int rawy = 0;    


    @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;    
    }    
}    

Android Event.getX 与getRawX的区别_第1张图片
Android Event.getX 与getRawX的区别_第2张图片

结论:

  • getRowX:触摸点相对于屏幕的坐标
  • getX: 触摸点相对于按钮的坐标
  • getTop: 按钮左上角相对于父view(LinerLayout)的y坐标
  • getLeft: 按钮左上角相对于父view(LinerLayout)的x坐标

可以想象 getRight()等同于下面的计算:getLeft()+getWidth()。

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

你可能感兴趣的:(android)