2

大きな背景を持つアプリケーションを作成しました。Nexus 7 では完全に動作しますが、Galaxy Nexus では背景がなくなり、logcat にエラーが表示されます: ビットマップが大きすぎてテクスチャにアップロードできません (...)。

私はこれを読みそこにあったコードも使用しました。背景を設定するために使用したコードは次のとおりです。

Display display = getWindowManager().getDefaultDisplay();
    width = display.getWidth();
    height = display.getHeight();


    //-------------------------------------------------------------------------------------------------------------

    ImageView achtergrond = (ImageView)findViewById(R.id.achtergrond);
    achtergrond.setImageBitmap(decodeSampledBitmapFromResource(getResources(), R.drawable.achtergrond, width, height));
} (...)

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
        int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(res, resId, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options);
}

public static int calculateInSampleSize(
        BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {

    // Calculate ratios of height and width to requested height and width
    final int heightRatio = Math.round((float) height / (float) reqHeight);
    final int widthRatio = Math.round((float) width / (float) reqWidth);

    // Choose the smallest ratio as inSampleSize value, this will guarantee
    // a final image with both dimensions larger than or equal to the
    // requested height and width.
    inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}

return inSampleSize;

}

私の R.drawable.achtergrond の解像度は 1100x539 です。また、そのルール (setBitmapImage) をコメントアウトすると、エラーが停止します。Galaxy Nexus では背景が表示されませんが、Nexus 7 では表示されます。画像は十分な解像度で表示されるほど大きいです。背景画像は現時点では drawable フォルダーにあります。

事前に助けてくれてありがとう!

4

1 に答える 1

11

背景をdrawable-nodpiフォルダに移動します。

あなたの同様の質問に対する他の回答で既に述べたように、各デバイスには、画像を画面上のテクスチャとしてレンダリングする必要がある最大サイズに制限があります。これは通常、幅と高さの両方で 2048 です。ただし、密度修飾子なしでドローアブルをフォルダー内に配置すると、Android はドローアブルが mdpi であると想定し、他の密度に合わせて拡大または縮小します。たとえば、画面の密度が xhdpi の場合、ドローアブルは 2 倍に拡大されます: 1100 x 2 = 2200 で、2048 の制限には大きすぎます。

于 2013-10-25T09:00:57.087 に答える