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"/>
アイコンを400 dpで表示しようとすると、次のぼやけた画像が生成されます(lollipopを実行している2015年頃の高解像度モバイルデバイス上):
ベクタードローアブルの定義で幅と高さを200dpに変更すると、400dpのレンダリングサイズでの状況が大幅に改善されます。ただし、これをTextView要素のドローアブルとして設定すると(つまり、テキストの左側にあるアイコン)、巨大なアイコンが作成されます。
私の質問:
1)ベクタードローアブルに幅/高さの仕様があるのはなぜですか?これらの全体のポイントは、ロスレスにスケールアップおよびスケールダウンして、その定義で幅と高さを無意味にすることだと思いましたか?
2)TextViewで24 dpのドローアブルとして機能する単一のベクタードローアブルを使用することはできますか。たとえば、さまざまなサイズの複数のベクタードローアブルを作成せずに、レンダリングされた要件に合わせてスケーリングする方法を使用するにはどうすればよいですか?
3)幅/高さの属性を効果的に使用するにはどうすればよいですか?viewportWidth / Heightとの違いは何ですか?
さらなる詳細:
- デバイスはAPI 22を実行しています
- Android Studio v1.5.1とGradleバージョン1.5.0の併用
- マニフェストはコンパイルおよびターゲットレベル23、最小レベル15です。また、最小レベルを21に移動しようとしましたが、これには違いがありませんでした。
- APKを逆コンパイルすると(最小レベルは21に設定されます)、ドローアブルフォルダーに単一のXMLリソースが表示されます。ラスタライズされた画像は生成されません。
drawable
フォルダーです。ベクター型ドローアブルxmlファイルの幅/高さは24 dpです。400dpの高さ/幅のImageViewを指定すると、確実にスケーリングが不十分な画像が作成されます。
drawable-anydpi-v21
私minSdkVersion
が21未満になるのは、私がで終わる唯一の理由です。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以降のデバイスでは使用されません(正しくスケーリングされるという事実に基づく)