2012-01-18 4 views
0

내 화면에 이미지 (ImageView)가 있습니다. 이미지는 대략 절반의 화면을 차지하므로 이미지와 이미지 양쪽 모두를 클릭 할 수 있습니다.Android : 이미지/ImageView에서 x y 좌표를 얻으려면 어떻게해야합니까?

이미지를 클릭하면 화면에 x 좌표와 y 좌표를 얻는 방법은 무엇입니까?

onTouchEvent를 사용했지만 이미지를 클릭 할 때만 이미지 외부를 클릭 할 때만 호출되었습니다.

감사합니다, 마티아스

+0

내가 문제를 해결하지만 난 내 자신에 대한 답변을 제출할 수없는 대신 난 단지 "공공 무효 onTouch (MotionEvent 이벤트)"와 이런 "공개 무효가 (부울 hasFocus) onWindowFocusChanged"구현 이 사이트의 정책 때문에 6 시간 동안 더 질문해야합니다. 나는 나중에 해결책을 게시 할 것이다. – Mattias

답변

0

클릭 이벤트를 받기 위해서 (때문에), 이미지 뷰에 OnClickListener를 사용하거나 이미지 뷰에서 클래스 및 기능 "공공 무효 onTouch (MotionEvent의 EVT)"를 덮어 얻을 수있는 X/Y가에서 좌표 추상적 이보기.

+0

ImageView에 OnClickListener를 설정하지 않은 것 같습니다. 대신 public void onTouch (MotionEvent 이벤트는 다음과 같습니다 : – Mattias

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

+2

어떻게 좌표를 얻을 수 있나요? click 이벤트 외부에서는 0을 얻습니다. – nikolakoco

2

ImageView에서 OnClickListener를 설정하지 않은 것 같습니다.

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

+0

'x가 있어야합니다. <= bitmap.getWidth() 'http://stackoverflow.com/questions/21347431/app-is-fc-if-the-user-presses-too-much-to-left-or-right – Si8

+0

@Manikandan : I public String xyString (int x, int y) { return "X :"+ String.valueOf (x) + "Y :"+ String.valueOf (y); } – EdgarT

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; 
      } 
     }); 
관련 문제