2012-10-05 2 views
0

제목에 쓰여 있듯이 ImageView에서 터치 이벤트를 감지하려고합니다. ImageTouchHandler 클래스에서 onTouch 이벤트를 사용하여이 작업을 수행 할 수 있습니다. 문제는 ImageView에 포함 된 이미지의 크기가 화면에 맞게 조정 된 경우 실제 위치가 아니라 ImageView 좌표에서 터치 위치를 얻게된다는 것입니다.Android : ImageView에서 실제 이미지의 터치 감지

예를 들어 내 이미지가 480 * 648이고 imageView가 1000 * 450 인 경우 이미지에서 터치 위치를 감지하는 방법을 모르겠습니다.

나는이와 실제 이미지의 왼쪽 높은 게재 순위를 얻을려고 : _imageView.getDrawable().getBounds().left,하지만 난 항상이 시도 0

있습니다

float leftImage = (_imageView.getWidth()-_imageView.getDrawable().getIntrinsicWidth())/2; 

을하지만 좋지 않다.

의견이 있으십니까? 사전에

감사합니다, 발렌틴 이미지가, 또는 정확히 센터 (너비 또는 높이)에 화면의 왼쪽에 위치, 또는 화면의 오른쪽에, 당신은 계산할 수있는 경우

+0

이미지 뷰를 그린 후 캔버스의 크기를 가져온 다음 Image의 실제 크기 인 스케일되지 않은 해상도로 나눠서 스케일 팩터를 제공하는 방법이 있습니까? 당신이 ImageView에 주어진 터치 좌표를 조정? – dennisdrew

+0

치수를 의미 할 때 실제 이미지 주위에 빈 공간이 있거나없는 치수를 의미합니까? 나는 공허함을 얻지 만, 공포심을 갖지 않을 수 없기 때문에. – ValentinH

+0

어떤 아이디어로주세요? – ValentinH

답변

0

leftXrightX 등 ...

그래서 당신이하는 일은 그 위치를 계산하는 것입니다. 예를 들어, 이미지가 화면의 중앙에있는 경우 :

  • leftx = (ScreenWidth - ImageWidth)/2
  • imagewidth를 추가하고, 지금은 rightX (rightX = leftX + imageWidth)
  • 은 높이 동일한 작업을 수행해야; 당신을 위해 지금

    public void calculateImageDimensions() { 
        if(ScreenWidth < 480) { 
         HeightDartBoard = ScreenWidth; 
         WidthDartBoard = ScreenWidth; 
         RadiusBoard = ScreenWidth/2; 
         if(WidthDartBoard == 320) { 
          RadMulti = 0.75; // multiplier for different scaled images 
         } else { 
          RadMulti = 0.5; // means half the image width and height 
         } 
         LeftXBoard = 0; 
        } else { 
         HeightDartBoard = 480; // I already know the width and height 
         WidthDartBoard = 480; 
         RadiusBoard = 240; 
         LeftXBoard = (ScreenWidth - WidthDartBoard)/2; // this is what interests you 
        } 
        RightXBoard = LeftXBoard + WidthDartBoard; // now add the width of image to left X 
        TopYBoard = intActionBar; // actionbar height is start of my image topY 
        BottomYBoard = TopYBoard + HeightDartBoard; // and again add height of board 
    } 
    

    :

    당신은 등 getWidthgetHeight

    내 코드를 최신 버전으로 API를 업데이트 할뿐만 아니라 이것에 대한 dennisdrew의 대답 @

시도를 사용할 수 있습니다

LeftX = (ScreenWidth - (WidthDartBoard * RadMulti))/2; 

이제는 width 및을 계산하는 예가 있습니다. 이미지의과 위치의 ... onTouchEvent 방법에서

당신은 지금 그것을 테스트 할 수

if(((eventX > leftX) && (eventX < rightX)) && ((eventY > topY) && (eventY < bottomY)))  { 
    // code here 
} 

을이 당신이 이미지에 어딘가에 클릭 true 경우. 당신은 이미지 자체에 새로운 xy 상대를 확인하려면

는 :

newX = eventX - leftX 
newY = eventY - topY 

이제 newXnewYX와 실제 이미지의 Y 있습니다.

관련 문제