2012-12-07 4 views
48

안녕 안드로이드 그리기 클래스의 두 가지 방법에 의해 혼란 스러워요android getIntrinsicHeight 및 getIntrinsicWidth는 무엇을 의미합니까?

getIntrinsicHeight() 
getIntrinsicWidth() 

API를 정의 http://developer.android.com/reference/android/graphics/drawable/Drawable.html#getIntrinsicHeight()

단어 고유 높이/폭이 무엇을 의미합니까라고? 실제 이미지의 너비입니까?

+2

여기에 정답은 http://stackoverflow.com/questions/6536418/android-why-are-the-width-height-of-the-drawable-in-imageview-wrong – mathheadinclouds

답변

102

내장형의 의미를 알고 싶은 경우, 이는 실제 소유 한 속성 일뿐입니다. 우리의 경우 getIntrinsicWidth/Height은 그 드로어 블의 기본 너비/높이를 제공한다는 의미입니다.

리소스 폴더에 입력 한 드로어 블의 크기를 수정하지 않고 반환합니다.

이제 getWidth 또는 getHeight은 XML 레이아웃의 ImageView에 지정한 너비 및 높이에 따라 달라질 수있는 값을 반환한다는 것을 알아야합니다.

ImageView의 너비와 높이를 100*100으로 XML 레이아웃에 제공하고 배경으로 사용한 드로어 블의 크기가 200 * 200이라고 가정 해 봅시다.

지금 getIntrinsicWidthgetWidth 반면 (200)는 그리기는 컬러 맵 많은 유형이 될 수 안드로이드 100

+0

감사합니다. 하지만 현재 url에서 이미지를 내리고 있습니다 (그리고 이미지 뷰를로드하지 마십시오). 브라우저에서 액세스하면 본질적인 높이와 너비가 원래 이미지와 같지 않습니다.보고되는 것보다 더 크지 만 위의 ur는 위입니다. 예를 들어, 그들은 같은 – user1697965

+0

같아야한다고 말하고 있습니다. 어쩌면 당신은 downloading.I 동안 이미지를 스케일링하는 방법을 다운로드 한 이미지가 작동하는지 모르겠지만 최소한 그것은 drawable에있는 그 이미지를 위해 작동합니다. –

+6

잘못되었습니다. 정답은 여기에있다. http://stackoverflow.com/questions/6536418/android-why-are-the-width-height-of-the-drawable-in-imageview-wrong – mathheadinclouds

4

반환해야 반환해야 등

모양이 드로어 블의 일부 극한 높이 등이 BitmapDrawable은 이미지의 크기입니다.

ColorDrawable (단색을 그리는 데 사용)와 같은 Drawables에는 고유 높이가 없습니다. 이 경우 getIntrinsicHeight/Width의 값은 -1을 반환합니다. 드로어 블은 고유의 높이/폭이없는 경우에도

, 모든 당김 필요 당신은을 사용하는 경우

(당신이 (캔버스) mydrawable.draw를 호출하기 전에 IE)가 자신을 렌더링하기 전에 자신의 경계를 설정해야합니다 drawable을 뷰의 배경으로 사용하면 뷰가 내부적으로 범위를 설정합니다. 그러나 자신의 onDraw에서 드로어 블을 사용하는 경우에는 setBounds를 통해 명시 적으로 경계를 설정해야합니다.

8

관련 질문 here on stackoverflow.

이미지가 인터넷에서 다운로드 된 경우 .getIntrinsicWidth().getIntrinsicHeight() 실제로 이미지의 너비와 높이가 각각 실제 너비와 높이가됩니다.

내재적이라 부르는 이유는 이미지에만 의존하기 때문에 (휴대 전화와 같이) 다른 것에는 의존하기 때문입니다.

아아, 당신이 얻는 것은 모든 상황에서 본질적이지는 않습니다 - 불행히도 이미지 이외의 것에 의존합니다.

여기서 잘못된 (즉, 비 내장) 결과가 나타납니다.의 당신이 당신에게 실행 아이콘의 너비 (픽셀)를 말할 것이다 다음

Log.i("", "ic_launcher intrinsic width " + getResources().getDrawable(R.drawable.ic_launcher).getIntrinsicWidth()); 

, 기본 런처 아이콘을 사용하고 있다고 가정 해 봅시다. 그러나 어느 것이? - 그 중 몇 개는 drawable-xhdpi 폴더에, 다른 하나는 drawable-hdpi 폴더에 있습니다. 여러분의 장치가 말하자면 xhdpi라면, 96을 제공합니다. 이것은 실제로 버전의 픽셀 너비입니다. drawable-xhdpi 폴더에있는 실행 프로그램 아이콘. 이제 drawable-xhdpi 폴더에있는 아이콘을 삭제하고 다시 실행하십시오 (여전히 xhdpi 장치 (실제 또는 에뮬레이트 된) 사용). 사용되는 이미지는 xhdpi 버전에 "가장 근접"하기 때문에 drawable-hdpi 폴더에 있습니다. 그 아이콘의 픽셀 폭은 72입니다. 그러나 위의 코드는 여전히 96을줍니다 !!!

사용 된 이미지에만 의존하지 않으므로 "내재적"인 것은 아닙니다 (적절한 의미에서).

그래서 내가 게으르다면 각 리소스 아이콘/이미지의 4 가지 버전을 생성하지 않습니다 (단, 1 또는 2를 사용하고 손으로 크기를 조정하는 대신). 언급 한 안드로이드를주의해야합니다 그릇된 명칭.

관련 문제