当我触摸按钮时,如何获得相对于整个视图的触摸的x / y位置?

时间:2013-10-27 07:17:19

标签: android touch ontouchlistener motionevent

我想要关于整个屏幕的触摸信息,但我只是相对于按钮获得触摸信息。

ButtonTouchListener = new OnTouchListener(){

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
             switch(v.getId()){
                case R.id.somebutton
                          //do things
                    //....etc
            }

           int action = event.getAction();
       switch(action){
       case MotionEvent.ACTION_UP:
         act += event.toString();
         System.out.println("release: " + act);
}};

我从事件中得到的x和y与按钮有关(0,0是按钮的一角,而不是屏幕的一角)。只有按下按钮时,如何才能获得相对于整个屏幕的x和y位置?

2 个答案:

答案 0 :(得分:3)

要获得相对于视图的触摸位置,请将触摸事件(x,y)添加到按钮(x,y);获取按钮相对于其父级(您的视图)的位置使用getLeft()getTop()方法。

View的{​​{3}}在排名下有以下内容:

  

可以通过调用来检索视图的位置   方法getLeft()和getTop()。前者返回左边,或者X,   表示视图的矩形的坐标。后者回归   表示视图的矩形的顶部或Y坐标。   这些方法都返回视图相对于它的位置   家长。例如,当getLeft()返回20时,表示视图   位于其直接左边缘右侧20像素处   父节点。

onTouch方法的示例代码:

float screenX = v.getLeft() + event.getX();   // X in Screen Coordinates
float screenY = v.getTop() + event.getY();    // Y in Screen Coordinates

答案 1 :(得分:1)

最好的方法(据我所知)是调用event.getRawX()和event.getRawY()。如果您的视图是整个屏幕,则此方法有效。如果没有,我不知道,我猜你的运气不好,但是rawx和y为我的目的而工作。