0

状況:

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自体に伝えるオプションはありますか? システムは最初からそうしていたので、そうする方法があるはずだと思います。

4

2 に答える 2

1

まず、カバー/フレームを別の方法で行うことをお勧めします。

  1. フレームを9パッチで描画可能にして、カバーをその上に描画したときに表示されたままになるパディングを9パッチで定義できるようにします。
  2. フレームをドローアブルとして配置しますbackground
  3. srcレイヤーリストではなく、画像の表紙を設定します
  4. を設定することを忘れないscaleTypeでくださいImageView。さまざまなオプションで遊んでください。ニーズに合わせてください。
<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:scaleType="fitCenter"
    android:background="@drawable/frame"
    android:src="@drawable/cover"/>
于 2012-05-29T10:17:53.000 に答える
1

同じ問題を抱えている他の人のために。9patch png は、私が抱えていない問題の解決策です。

これまでのところ、問題を解決するために近づいた唯一のことは、リソースを drawable-nodpi フォルダーに入れることでした。 ここにドキュメントへの参照があります

于 2012-09-04T18:28:00.713 に答える