2

test.pngのような画像があります。

その画像をWebから購入する必要があり、別の場所でドローアブルから同じ画像を選択する必要があります。

問題は、Webとドローアブルに同じpngがあることです。ドローアブルにある画像を表示すると、適切なサイズで表示されますが、Webから取得すると、小さく表示されます。明確にするために、それは私の問題の単なる例です...私は実際には同じ画像を使用していません。それらは異なる画像ですが、同じサイズです。確認のために、同じ画像をWebとドローアブルにアップロードしましたが、同じ画像が異なるサイズで表示されることがわかりました。両方をドローアブルモードのように表示するには、何をする必要がありますか?

私はこれを確認しました:

SDカードに保存した画像を取得したら、次のコマンドを使用します。

File sdCard = Environment.getExternalStorageDirectory();
Fle directory = new File(sdCard.getAbsolutePath());
File file = new File(directory, "teste.png");
File InputStream streamIn;
Bitmap bitmap = Bitmapfactory.decodeStream(streamin);
ImageView image = new ImageView(c);
image.setImageBitmap(bitmap);

画像は次のように大きく表示されます。

Drawable img = Drawable.createFromPath(new File(Environment.getExternalStorageDirectory(), "teste.png").getAbsolutePath());
ImageView image = new ImageView(c);
image.setImageDrawable(img);

ただし、最初のモードでは、getResouces.getDrawableを使用してリソースドローアブルから直接画像を取得する場合よりも小さく表示されます...

4

2 に答える 2

2

エラーを再現するために次のコードを書きました。

LinearLayout ll = (LinearLayout) findViewById(R.id.root);

try {
    ImageView image = new ImageView(this);
    Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open("tag-logo-android.png"));
    image.setImageBitmap(bitmap);
    ll.addView(image);

    image = new ImageView(this);
    Drawable drawable = Drawable.createFromStream(new URL("http://cdn.sstatic.net/stackoverflow/img/tag-logo-android.png").openStream(), null);
    image.setImageDrawable(drawable);
    ll.addView(image);
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

問題は画像のソースではありません。問題は、Drawable画面密度を無視することです。このコードは機能します:

LinearLayout ll = (LinearLayout) findViewById(R.id.root);

try {
    ImageView image = new ImageView(this);
    Bitmap bitmap = BitmapFactory.decodeStream(getAssets().open("tag-logo-android.png"));
    image.setImageBitmap(bitmap);
    ll.addView(image);

    image = new ImageView(this);
    bitmap = BitmapFactory.decodeStream(new URL("http://cdn.sstatic.net/stackoverflow/img/tag-logo-android.png").openStream());
    image.setImageBitmap(bitmap);
    ll.addView(image);
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

あなたの場合、次を使用できます:

bitmap = BitmapFactory.decodeFile(new File(Environment.getExternalStorageDirectory(), "test.png"))
于 2012-08-28T20:06:17.943 に答える
0

問題を解決するには、Drawableの代わりにBitmapオブジェクトを使用する必要があるかもしれません。

于 2012-08-28T19:02:54.553 に答える