[解決済み] ベクターの描画が期待通りに拡大縮小されないのはなぜですか?
質問
Androidアプリでベクターデータを使用しようとしています。 以下から http://developer.android.com/training/material/drawables.html (強調) を参照してください。
<ブロッククオートAndroid 5.0 (API Level 21) 以降では、ベクター形式のdrawableを定義することができます。 を定義することができます。
このdrawableを使って
<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 年頃の大型高解像度モバイル デバイス上)。
vector drawable の定義で width と height を 200dp に変更すると、400dp のレンダリングサイズでの状況は大幅に改善されます。 しかし、これを TextView 要素 (つまり、テキストの左側のアイコン) の drawable として設定すると、巨大なアイコンが作成されるようになりました。
私の質問です。
1) なぜベクター描画可能なものに幅と高さの指定があるのでしょうか? これらの全体のポイントは、ロスレスで拡大縮小することであり、その定義において幅と高さは無意味だと思ったのですが?
2) TextView上で24dpのdrawableとして機能する単一のベクターdrawableを使用することは可能でしょうか? 例: 異なるサイズの複数のベクトル描画可能ファイルの作成を避け、代わりに私のレンダリング要件に合わせてスケールアップするものを使用するにはどうすればよいですか?
3) どうすれば効果的に width/height 属性を使用できますか、また viewportWidth/height との違いは何ですか?
追加の詳細です。
- デバイスは API 22 を実行しています。
- Android Studio v1.5.1 と Gradle version 1.5.0 を使用しています。
- マニフェストは、コンパイルとターゲットレベル23、最小レベル15です。 min levelを21に移動することも試しましたが、違いはありませんでした。
- APK をデコンパイルすると (min level を 21 に設定した場合)、drawable フォルダに 1 つの XML リソースが表示されます。 ラスタライズされた画像は生成されません。
どのように解決するのですか?
この問題についての新しい情報はこちらです。
https://code.google.com/p/android/issues/detail?id=202019
を使っているように見えますが
android:scaleType="fitXY"
を使うと、ロリポップでも正しく拡大縮小されるようです。
Googleのエンジニアより。
画像をシャープに見せるために、scaleType='fitXY' が回避策になるかどうか教えてください。 画像がシャープに見えるようにするためです。
マシュマロ対ロリポップは、マシュマロに追加された特別なスケーリング処理に起因しています。 マシュマロに追加された特別なスケーリング処理によるものです。
また、コメントについて: "正しい動作です。ベクター描画可能な は、品質を損なうことなく拡大縮小する必要があります。したがって、アプリケーションで同じアセットを 3 つのサイズで使用する場合 を 3 種類のサイズで使用したい場合、ハードコードされた異なるサイズの vector_drawable.xml を 3 回、異なるハードコードされたサイズで複製する必要はありません。
私はこれがそうであるべきだと完全に同意しますが、現実には、Android プラットフォームにはパフォーマンス上の問題があります。 Android プラットフォームにはパフォーマンス上の懸念があるため、まだ理想的な世界には到達していません。 理想的な世界にはまだ到達していません。 そのため、パフォーマンスを向上させるために、3 つの異なる vector_drawable.xml を使用することをお勧めします。 3つのサイズを同時に画面に描画したい場合は、3種類のvector_drawable.xmlを使用することをお勧めします。
技術的な詳細は、基本的にフックの下でビットマップを使用しています。 を使用して、複雑なパスのレンダリングをキャッシュし、最高の再描画パフォーマンスを得ることができます。 再描画のパフォーマンスは、ビットマップのドローアブルを再描画するのと同等です。
関連
-
[解決済み] DrawableをBitmapに変換する方法は?
-
[解決済み] なぜJavaのVector(およびStack)クラスは時代遅れ、または非推奨とされているのですか?
-
[解決済み] Androidのdrawableディレクトリはサブディレクトリを含むことができますか?
-
[解決済み] アイコンのミップマップ描画可能
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] 文字列リソースにHTML?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] バイト配列の画像ファイルをビットマップに変換するには?
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] EditTextの右側のDrawableにonClickListenerを設定する [重複] [重複
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] 文字列リソースにHTML?