2014-02-26 5 views
4

ImageView 드로어 블 위치의 실제 위치를 찾고 싶습니다. 현재 ImageView의 크기가 상대 레이아웃에 의해 조정되므로 0을 반환합니다. 그러나 이미지 뷰 내부의 드로어 블이 상대 레이아웃에서 모두 채워지지 않습니다. 전체 너비를 채우고, 위쪽과 아래쪽에 빈 공간이 수직으로 가운데에 배치됩니다.ImageView의 실제 위치 찾기

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relative_layout_main" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    > 

    <ImageView 
     android:id="@+id/imageview" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:src="@drawable/drawable"/> 

</RelativeLayout> 

첨부 된 스크린 샷을 참조하십시오. 나는 빨간색 사각형의 x와 y와 너비와 높이를 찾고 있습니다.

enter image description here

+0

을 할 때마다 화면에 이미지의 좌표를 반환이 코드의 getBounds().. 왼쪽/오른쪽/아래/최고 값 .. ?? – Neha

+0

일치 상위 너비와 상위가 전체 화면 너비 인 경우 0,0 또는 상위 위치 –

+0

을 반환합니다. 시작은 0 0만이됩니다 .. ?? – Neha

답변

6

당신은 조회수가 측정 될 때까지 기다려야한다. OnGlobalLayoutListener을 사용하십시오. 당신의 ImageView가 전체 화면을 채우고 있기 때문에

imageView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    pubic void onGlobalLayout() { 
     int height = imageView.getHeight(); 
     int width = imageView.getWidth(); 
     int x = imageView.getLeft(); 
     int y = imageView.getTop(); 

     //don't forget to remove the listener to prevent being called again by future layout events: 
     imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
    } 
}); 

, 그것은 아마 장치의 폭과 너비 및 높이 등의 창 높이를 줄 것이다. ImageView 내부 화상의 실제 폭과 높이를 얻기 위해, 'match_parent까지의 높이와 ImageView 설정'은 RelativeLayout 설정 wrap_content로의 높이를, 상기 ImageViewlayout_gavitycenter_vertical로 설정.

+0

답변 주셔서 감사합니다 최대한 빨리 확인하고 작동하는 방식으로 답변합니다 –

+0

죄송합니다. 잘못된 값은 0이지만 최상위 값은 나쁜 값으로 반환합니다. –

+0

무엇이 돌아 오나요? –

0

보기의 실제 좌표를 얻으려면 getTranslationX()getTranslationY() 메서드를 호출해야합니다. 이 메소드가 0 개의 값을 돌려 준다면 관심있는 뷰에 클릭 핸들러를 첨부하고 onClick 호출 내에서 위 메소드와 getWidth 및 getHeight를 호출하십시오.

+0

답변 주셔서 감사합니다 최대한 빨리 확인하고 작동 방식을 회신하십시오 –

+0

답변은 여전히 ​​0 –

+0

을 반환하며 getWidth 및 hetHeight 메소드는 무엇입니까? 청취자의 내부에서 전화하면 어떻게 되나요? – karvoynistas

0

질문 : 달성하고자하는 것은 무엇입니까? (내 말은, 왜 빈 공간을 앞에 두어야하는지?)

ImageView은 부모를 채우기 위해 크기가 조정되므로, 추천에서 0이 나오는 이유입니다. 따라서 귀하의 ImageView은 그림만큼 커야합니다. Imageview의 높이를 wrap_content으로 변경하고 이미지 크기를 최대한 크게 조정하십시오. 실수를하지 않은 경우 RelativeLayout이 녹색이어야하며 가운데에 이미지가 표시되어야합니다 (이미지가 parent_width보다 작 으면 빨간색 배경이 왼쪽과 오른쪽으로 표시되어야합니다).

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relative_layout_main" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:background="@android:color/holo_green_light" //green background for debugging 
> 

<ImageView 
    android:background="@android:color/holo_red_light" //red background for debugging 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"  //change hieght to content 
    android:layout_centerInParent="true"  //center in parent 
    android:scaleType="fitCenter"   //scale image to fit center 
    android:src="@drawable/drawable"/> 

그리고 @Neha가 버튼을 추가하고 버튼을 클릭

0

시도를 제안 지금 당신은 당신의 ImageView 위치를 얻어야한다. onclick() 메서드 내에서 imageView의 높이와 너비를 가져옵니다. 화면에 아무 것도하지 않았기 때문에 언제든지 0이됩니다. 적어도 일부 이벤트를 전달하고 이벤트를 처리했습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나이 위치는 onClick 메서드가 아닌 다른 요소를 추가해야합니다. –

2

이 시도 : 여기 drawLeft는 X 값은 drawTop Y 값이다.

ImageView image = (ImageView)findViewById(R.id.imageview); 
Rect rt = image.getDrawable().getBounds(); 

int drawLeft = rt.left; 
int drawTop = rt.top; 
int drawRight = rt.right; 
int drawBottom = rt.bottom; 

당신은 높이 = drawBottom-drawTop폭 = drawRight-drawLeft를 얻을 수 있습니다.

희망이 도움이 될 것입니다.

3

나는 내가 해결책을 가지고 생각 :

당신은 의 의견이 팽창되어 있는지 확인하기 위해 어디에 활동의 onWindowFocusChanged 방법을 재정의 할 수 있습니다

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    int array[] = new int[2]; 
    image.getLocationOnScreen(array); 
} 

이 완료, 당신은 정확한 좌표를 가질 것입니다. 나는 희망합니다.

추 신 : 이미지는 ImageView입니다.

0

이 시도 :

int[] imageCordinates = new int[2]; 
imageView.getLocationOnScreen(imageCordinates); 

int x = imageCordinates[0]; 
int y = imageCordinates[1]; 

// 당신은 u는 imageView.getDrawable()을 시도해 봤어