2

InputStream を使用して BitmapDrawables を作成する必要があります。Uri から InputStreams を取得しています。ただし、リソース ドローアブルは間違ったターゲット密度で描画されます。

私が使用しているデバイスのターゲット密度は 320 である必要があります。代わりに、BitmapDrawable がターゲット密度 160 で作成されています (悪い、画像が半分のサイズで表示されます)。

次の例では、ターゲット密度が間違っています - 160 に設定します:

Uri fromResource = new Uri.Builder()
  .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
  .authority("com.myapp.whatever")
  .path(String.valueOf(R.drawable.default_image))
  .build();

InputStream resourceStream = context.getContentResolver().openInputStream(fromResource);
// correct image, wrong size
Drawable resourceDrawable = new BitmapDrawable(context.getResources(), resourceStream);

他の方法を使用すると、ターゲット密度が正しく設定されます-320 に設定されます。

// same image, but right size
Drawable thisWayWorks = context.getResources().getDrawable(R.drawable.default_image);

最初の例でターゲット密度が間違っているのはなぜですか? BitmapDrawable は、渡された Resources obj を使用して密度を正しく設定すべきではありませんか?

「default_image」には、md、hd、および xd アセットがあります。xd イメージのみがロードされていることがわかるように、md および hd アセットを削除してテストを試みましたが、同じ結果が得られました。

詳細、なぜこれをやりたいのか:

ディスクに画像があり、描画可能なリソースとして別のデフォルトの画像があります(ディスクに画像が見つからない場合に表示するため)。Uri を使用して常に画像を読み込むことができ、「この Uri は実際にはディスク、コンテンツ、アセットなどではなく、リソースを指している」という特別なケースがなければ、パイプライン全体が簡素化されます。

4

0 に答える 0