Android 앱에서 벡터 드로어 블을 사용하려고합니다. 에서 http://developer.android.com/training/material/drawables.html (강조 광산) :
Android 5.0 (API 레벨 21) 이상에서는 정의 를 잃지 않고 확장되는 벡터 드로어 블을 정의 할 수 있습니다 .
이 드로어 블 사용 :
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@color/colorPrimary" android:pathData="M14,20A2,2 0 0,1 12,22A2,2 0 0,1 10,20H14M12,2A1,1 0 0,1 13,3V4.08C15.84,4.56 18,7.03 18,10V16L21,19H3L6,16V10C6,7.03 8.16,4.56 11,4.08V3A1,1 0 0,1 12,2Z" />
그리고이 ImageView :
<ImageView
android:layout_width="400dp"
android:layout_height="400dp"
android:src="@drawable/icon_bell"/>
아이콘을 400dp로 표시하려고 할 때이 흐릿한 이미지를 생성합니다 (롤리팝을 실행하는 2015 년 경의 거대한 고해상도 모바일 장치에서).
벡터 드로어 블 정의에서 너비와 높이를 200dp로 변경하면 400dp 렌더링 크기에서 상황이 크게 개선됩니다. 그러나이를 TextView 요소 (예 : 텍스트 왼쪽의 아이콘)에 대한 드로어 블로 설정하면 이제 거대한 아이콘이 생성됩니다.
내 질문 :
1) 벡터 드로어 블에 너비 / 높이 사양이있는 이유는 무엇입니까? 나는 이것들의 전체 요점은 그들이 정의에서 너비와 높이를 무의미하게 만드는 무손실로 확장 및 축소된다는 것이라고 생각했습니다.
2) TextView에서 24dp 드로어 블로 작동하지만 훨씬 더 큰 이미지를 사용하기 위해 잘 확장되는 단일 벡터 드로어 블을 사용할 수 있습니까? 예를 들어 크기가 다른 여러 벡터 드로어 블을 만드는 것을 피하고 대신 렌더링 된 요구 사항에 맞게 조정되는 것을 사용하는 방법은 무엇입니까?
3) 너비 / 높이 속성을 효과적으로 사용하는 방법과 viewportWidth / Height의 차이점은 무엇입니까?
추가 세부 사항:
- 장치가 API 22를 실행 중입니다.
- Gradle 버전 1.5.0과 함께 Android Studio v1.5.1 사용
- 매니페스트는 컴파일 및 목표 레벨 23, 최소 레벨 15입니다. 또한 최소 레벨을 21로 이동하려고 시도했지만 차이가 없습니다.
- APK를 디 컴파일하면 (최소 레벨이 21로 설정 됨) 드로어 블 폴더에 단일 XML 리소스가 표시됩니다. 래스터 화 된 이미지는 생성되지 않습니다.
drawable
폴더입니다. 벡터 드로어 블 xml 파일의 너비 / 높이는 24dp입니다. 400dp 높이 / 너비의 ImageView를 지정하면 확실히 잘못된 크기의 이미지가 생성됩니다.
drawable-anydpi-v21
이기 때문 minSdkVersion
입니다. 21 미만으로 설정하면 행동에 변화가 minSdkVersion
있습니까? XML을 이동하는 것은 drawable-anydpi
어떻습니까? 나는 변화가 기대하지 않을 것이다 그러나 나는 또한 벡터 이미지가 ... 제대로 확장 될 기대
drawable-anydpi-v21
mdi / hdpi / etc에서 다양한 래스터 화 된 이미지가있는 단일 xml 파일 . 폴더. 그래도 최종 렌더링 결과에는 변경이 없습니다.
New -> Vector Asset
벡터 이미지 XML이 드롭됩니다. 그러나 apktool을 사용하여 빌드 된 APK의 압축을 풀면 XML 파일이drawable-anydpi-v21
API 21+ 기기에서 올바르게 확장되고 있음을 알 수 있습니다. 래스터 파일은drawable-<mdpi/hdpi/etc>-v4
폴더에 배치되고 API 21+ 장치에서는 사용되지 않습니다 (올바르게 확장된다는 사실을 기반으로 함)