状況:
2 つのドローアブルのレイヤー リストを含むイメージビューがあります。フレーム ドローアブルは 800x400px で、カバー ドローアブルは 800x380px です。両方の画像は drawable フォルダーにあります
<ImageView
android:id="@+id/preview_img_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.9"
android:adjustViewBounds="true"
android:src="@drawable/result_preview"/>
drawable/result_preview の Drawable レイヤー リスト
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/cover">
<bitmap
android:gravity="left|top"
android:src="@drawable/cover" />
</item>
<item
android:id="@+id/frame">
<bitmap
android:gravity="left|top"
android:src="@drawable/frame" />
</item>
</layer-list>
このセットアップは、カバーがすべてのデバイスで枠付きで表示されると予想どおりに機能します。これで、ユーザーはサンプル カバーを同じサイズの別のカバーに交換できます。
レイヤーリストの表紙を差し替えて、コマはそのままに。
LayerDrawable layer = (LayerDrawable) getResources().getDrawable(R.drawable.result_preview);
InputStream coverIs = getContentResolver().openInputStream(Uri.parse(coverUri));
this.drwCover = (BitmapDrawable) BitmapDrawable.createFromStream(coverIs, coverUri);
drwCover.setGravity(Gravity.LEFT | Gravity.TOP);
//drwCover.getBitmap().setDensity(160);
layer.setDrawableByLayerId(R.id.cover, drwCover);
imageView.setImageDrawable(layer);
問題:
現在のカバーを新しいもの (古いものと同じ寸法) に交換すると、使用するデバイスによって結果が異なります。
画面が 3.2 で解像度が 480x320 のデバイスでは、交換したカバーがフレームに収まります。解像度が 3.7 で解像度が 800x480 のデバイスでは、交換されたカバーは古いカバーよりも小さく表示されます。
私が見つけたのは、小さなデバイスのイメージビューのドローアブルの固有の高さが、ドローアブルの寸法と同じ 800x400 であることです。大きな画面では、ドローアブルの固有の高さが 30% 大きくなります。
本質的な値が画面ごとに異なる場合があることは知っています。
私が期待していたのは、古いものを置き換えるドローアブルが、古いものと同じように +30% にスケールアップされることです。しかし、これは起こりませんでした。
質問:
イメージビューまたはレイヤーリストをAdpt自体に伝えるオプションはありますか? システムは最初からそうしていたので、そうする方法があるはずだと思います。