3

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

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 位置?

4

2 回答 2

4

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

文档在PositionView有以下内容:

可以通过调用 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
于 2013-10-27T22:59:20.037 回答
2

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

于 2013-11-17T00:40:20.007 回答