2012-01-18 140 views
0

我在屏幕上有一個圖像(ImageView)。圖像佔用大約一半的屏幕,這意味着您可以單擊圖像和圖像兩側的圖像。Android:如何獲取圖像/ ImageView中的xy座標?

當我點擊圖像時如何獲得屏幕上的x和y座標?

我嘗試過使用onTouchEvent,但只有當我點擊圖像之外時,纔會調用它,而不是當我單擊圖像時。

問候, 馬蒂亞斯

+0

我解決了這個問題,但我不能提交答案,我自己由於這個網站的政策問題還有6個小時的問題。我稍後會發布解決方案。 – Mattias 2012-01-18 14:10:21

回答

0

使用OnClickListener上的ImageView接收click事件,或抽象您從ImageView的類和覆蓋功能「公共無效onTouch(MotionEvent EVT)」來獲取X/Y的座標這個觀點。

+0

我最終沒有在ImageView上設置任何OnClickListener。相反,我只實現了public void onTouch(MotionEvent事件是這樣的: – Mattias 2012-01-18 14:03:51

4

您可以使用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

2

我最終沒有在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必須是<= bitmap.getWidth()'http://stackoverflow.com/questions/21347431/app-is-fc-if-the-user-presses-too-much-to-left-or-right – 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

0
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; 
      } 
     });