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 回答