0

ひえ。私はライブ壁紙に取り組んでいますが、問題があります。壁紙の視差効果が完了しました。さて、問題は、ライブ壁紙のビットマップ (つまり、静的な背景) が適切にスケーリングされていないことです。一部の画面では幅が適切ですが、一部の画面ではビットマップ (つまり、背景) が半分しか表示されません。

密度、ウィンドウマネージャー、および px から dp への変換を試しました。

それらのどれも私にとってはうまくいかないようです。または、それに対する私のアプローチが適切な方法ではない可能性があります。

私は同じために助けが必要です。

コードスニペット

this._backgroundImage = BitmapFactory.decodeResource(context.getResources(),R.drawable.scene, options);

Bitmap background_image = Bitmap.createScaledBitmap(_backgroundImage, width, height, false);

canvas.drawBitmap(this.background_image, 0, 0, null);
4

3 に答える 3

1

私は時々以下の方法を使用していました..これらがあなたに役立つかどうかわかりません..これがあなたのために働くかどうかチェックしてください

float scale = getResources().getDisplayMetrics().density;
Display display = ((WindowManager) main.getSystemService(Context.WINDOW_SERVICE)) 
.getDefaultDisplay();
int WIDTH = display.getWidth();
int HEIGHT = display.getHeight();

public static Drawable resizeDrawable(Drawable d, float scale) {
    Drawable drawable = null;
    if (d != null) {
        try {
            Bitmap bitmap1 = ((BitmapDrawable) d).getBitmap();
            int width = 0;
            int height = 0;
            if (Math.min(WIDTH, HEIGHT) > 600) {
                width = (int) (100 * scale + 0.5f);
                height = (int) (100 * scale + 0.5f);

            } else if (Math.min(WIDTH, HEIGHT) > 240) {
                width = (int) (70 * scale + 0.5f);
                height = (int) (70 * scale + 0.5f);

            } else {
                width = (int) (44 * scale + 0.5f);
                height = (int) (44 * scale + 0.5f);
            }

            drawable = new BitmapDrawable(resizeBitmap(bitmap1,
                    width, height));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return drawable;
}

resizeDrawableメソッドのif-else条件で使用される値は、試行nエラーによって取得された任意の値であることに注意してください(これは私のアプリに適しています)。ターゲットとする画面に応じて他の値を試すことができます

public static Bitmap resizeBitmap(final Bitmap bitmap, final int width,
        final int height) {
    final int oldWidth = bitmap.getWidth();
    final int oldHeight = bitmap.getHeight();
    final int newWidth = width;
    final int newHeight = height;

    // calculate the scale
    final float scaleWidth = ((float) newWidth) / oldWidth;
    final float scaleHeight = ((float) newHeight) / oldHeight;

    // create a matrix for the manipulation
    final Matrix matrix = new Matrix();
    // resize the Bitmap
    matrix.postScale(scaleWidth, scaleHeight);
    // if you want to rotate the Bitmap

    // recreate the new Bitmap
    final Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
            oldWidth, oldHeight, matrix, true);

    return resizedBitmap;
}
于 2012-12-10T10:52:08.747 に答える
0

これを使用して画面サイズを取得し、それに応じてスケーリングできます。

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();
于 2012-12-10T10:54:33.653 に答える
0

これを試して:

ビットマップ resizedBitmap=Bitmap.createScaledBitmap(bb, newWidth, newHeight, false);

それが機能するかどうか教えてください。

于 2012-12-10T10:40:31.010 に答える