android getIntrinsicHeight 및 getIntrinsicWidth는 무엇을 의미합니까?
안녕하세요 Android Drawable 클래스의 두 가지 방법으로 혼란 스럽습니다.
getIntrinsicHeight()
getIntrinsicWidth()
고유 높이 / 너비라는 단어는 무엇을 의미합니까? 실제 이미지의 너비입니까?
intrinsic 의 의미를 알고 싶다면 객체가 소유 한 실제 속성 일뿐입니다. 우리의 경우 getIntrinsicWidth/Height
단순히 해당 드로어 블의 기본 너비 / 높이를 제공하는 것을 의미합니다.
수정하지 않고 리소스 폴더에 넣은 드로어 블의 정확한 크기를 반환합니다.
이제 XML 레이아웃에서 지정한 너비와 높이에 따라 달라질 수있는 값을 반환 getWidth
하거나 getHeight
반환해야 ImageView
합니다.
XML 레이아웃에서와 ImageView
같이 너비와 높이를 제공 100*100
했고 배경으로 사용한 드로어 블의 크기가 200 * 200 이라고 가정 해 보겠습니다 .
이제 getIntrinsicWidth
200 getWidth
을 반환해야 하지만 100을 반환해야합니다.
인터넷에서 이미지를 다운로드 .getIntrinsicWidth()
하고 .getIntrinsicHeight()
실제로 이미지 의 "실제"너비와 높이를 제공하는 경우.
이미지에만 의존하고 다른 것은 (예 : 휴대 전화)에 의존하기 때문에 내재적이라고합니다.
아아, 당신이 얻는 것은 모든 상황에서 내재적이지 않습니다. 불행히도 이미지 이외의 것에 의존합니다.
여기에서 잘못된 (즉, 내재적이지 않은) 결과를 얻을 수 있습니다. 기본 런처 아이콘을 사용하고 있다고 가정 해 보겠습니다.
Log.i("", "ic_launcher intrinsic width " + getResources().getDrawable(R.drawable.ic_launcher).getIntrinsicWidth());
런처 아이콘의 너비 (픽셀)를 알려줍니다. 그러나 어느 것? -드로어 블 -xhdpi 폴더에 하나씩, 드로어 블 -hdpi 폴더에 하나씩 등 여러 개가 있습니다. 음, 장치가 xhdpi 인 경우 96을 제공합니다. 이는 실제로 버전의 픽셀 너비입니다. drawable-xhdpi 폴더에있는 런처 아이콘. 이제 drawable-xhdpi 폴더에서 아이콘을 삭제하고 다시 실행합니다 (여전히 xhdpi 장치 (실제 또는 에뮬레이션) 사용). 사용되는 이미지는 drawable-hdpi 폴더에서 가져온 것입니다. xhdpi 버전에 "가장 가깝기"때문입니다. 이 아이콘의 픽셀 너비는 72입니다. 그러나 위의 코드는 여전히 96을 제공합니다 !!!
이것은 사용 된 이미지에만 의존하지 않기 때문에 (단어의 적절한 의미에서) "내재적"이 아닙니다.
따라서 나처럼 게으르고 따라서 각 리소스 아이콘 / 이미지의 4 가지 버전을 생성하지 않는 경우 (대신 1 개 또는 2 개만 사용하고 수동으로 크기 조정) 언급 된 Android의 잘못된 이름에주의해야합니다.
안드로이드에서 드로어 블은 색상, 비트 맵, 모양 등과 같은 다양한 유형이 될 수 있습니다.
이러한 드로어 블 중 일부에는 이미지의 차원 인 BitmapDrawable과 같은 고유 높이가 있습니다.
ColorDrawable (단색을 그리는 데 사용됨)과 같은 드로어 블에는 고유 높이가 없습니다. 이 경우 getIntrinsicHeight / Width 값은 -1을 반환합니다.
드로어 블에 고유 한 높이 / 너비가없는 경우에도 모든 드로어 블은 자체적으로 렌더링되기 전에 경계를 설정해야합니다 (예 : mydrawable.draw (canvas)를 호출하기 전에).
드로어 블을 뷰의 배경으로 사용하는 경우 뷰는 내부적으로 경계를 설정합니다. 그러나 자신의 onDraw에서 드로어 블을 사용하는 경우 setBounds를 통해 명시 적으로 경계를 설정해야합니다.
'IT TIP' 카테고리의 다른 글
git은 특별히 명명 된 파일 2 개를 무시하지 않습니다. (0) | 2020.12.10 |
---|---|
파이썬 삼항 연산자없이 (0) | 2020.12.10 |
WKWebView로 마이그레이션하는 방법? (0) | 2020.12.10 |
Maven 체크 스타일 비활성화 (0) | 2020.12.10 |
C # UserControl에 Dispose 기능을 어떻게 추가합니까? (0) | 2020.12.10 |