Android:如何获取图像/ ImageView中的xy坐标?

问题描述:

我在屏幕上有一个图像(ImageView)。图像占用大约一半的屏幕,这意味着您可以单击图像和图像两侧的图像。Android:如何获取图像/ ImageView中的xy坐标?

当我点击图像时如何获得屏幕上的x和y坐标?

我尝试过使用onTouchEvent,但只有当我点击图像之外时,才会调用它,而不是当我单击图像时。

问候, 马蒂亚斯

+0

我解决了这个问题,但我不能提交答案,我自己由于这个网站的政策问题还有6个小时的问题。我稍后会发布解决方案。 – Mattias 2012-01-18 14:10:21

使用OnClickListener上的ImageView接收click事件,或抽象您从ImageView的类和覆盖功能“公共无效onTouch(MotionEvent EVT)”来获取X/Y的坐标这个观点。

+0

我最终没有在ImageView上设置任何OnClickListener。相反,我只实现了public void onTouch(MotionEvent事件是这样的: – Mattias 2012-01-18 14:03:51

您可以使用getLocationOnScreen()

imageView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      int[] values = new int[2]; 
      view.getLocationOnScreen(values); 
      Log.d("X & Y",values[0]+" "+values[1]); 
     } 
    }); 

而且,我的this answer将是有用的。

+5

)好像我只在屏幕上获取图像的位置。无论图像中的哪个位置,我都会返回(0,205)(这是位置 – Mattias 2012-01-18 13:36:19

+2

如何获取坐标,但在点击事件之外,因为我得到0。 – nikolakoco 2013-01-26 19:05:16

我最终没有在ImageView上设置任何OnClickListener。相反,我只是执行“公共无效onTouch(MotionEvent事件)”和“公共无效onWindowFocusChanged(布尔hasFocus)”是这样的:

private int fieldImgXY[] = new int[2]; 

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

    // Use onWindowFocusChanged to get the placement of 
    // the image because we have to wait until the image 
    // has actually been placed on the screen before we 
    // get the coordinates. That makes it impossible to 
    // do in onCreate, that would just give us (0, 0). 
    fieldImage.getLocationOnScreen(fieldImgXY); 
    Log.i(LOG_TAG, "fieldImage lockation on screen: " + 
      xyString(fieldImgXY[0], fieldImgXY[1])); 
} 

public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     Log.i(LOG_TAG, "touch event - down"); 

     int eventX = (int) event.getX(); 
     int eventY = (int) event.getY(); 
     Log.i(LOG_TAG, "event (x, y) = " + xyString(eventX, eventY)); 

     int xOnField = eventX - fieldImgXY[0]; 
     int yOnField = eventY - fieldImgXY[1]; 
     Log.i(LOG_TAG, "on field (x, y) = " + xyString(xOnField, yOnField)); 
    } 
    return super.onTouchEvent(event); 
} 
+0

您可以发布xyString()方法吗? – Manikandan 2012-04-20 14:27:33

+0

应用程序FC声明'x必须是 Si8 2014-01-25 23:09:19

+0

@Manikandan:I认为它应该是这样的: public String xyString(int x,int y){ return“X:”+ String.valueOf(x)+“Y:”+ String.valueOf(y); } – EdgarT 2014-03-18 01:20:52

imageview.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        int x = (int) event.getX(); 
        int y = (int) event.getY(); 
       } 
       return false; 
      } 
     });