0

我设置了一个动态壁纸(为简单起见,假设它由两个并排放置的旋转位图组成,每个旋转速度不同;还要注意位图的边缘(不是图像周围的不可见框,而是绘图的实际像素)正在触摸。)

我将每个转换描述为画布大小的百分比(0 到 1 之间的值乘以 c.getHeight() 和 c.getWidth()(其中 c 是画布)。)

无论如何,只要保持纵横比,一切都可以正常工作。所以 xxhdpi 和 xhdpi @ 1080x1920 和 720x1280 都很好,但是当我在 nexus s @ 480x800 上运行它时,这两个位图不再正确定位。

我不想扭曲我的图像(它们是圆圈并且必须保持圆圈),所以我认为最好的方法是限制画布的大小并将其居中。

所以对于 nexus s @ 480x800,我实际上只想在一个 450x800 的区域中绘制,我将在我的屏幕上居中。

事实上,我总是希望我的 2 个位图位于高度 = 宽度 * 0.5625 的区域中。

我该怎么做呢?

注意:我的动态壁纸基于立方体样本。

如果我遗漏了任何重要的细节,请告诉我,

谢谢!

维尔纳

4

1 回答 1

0

在您的引擎内部,执行以下操作以捕获屏幕的高度和宽度

int screenHeight, screenWidth;
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    super.onSurfaceChanged(holder, format, width, height);
    screenHeight = height; screenWidth = width;
}

无论你在哪里解码你的位图,都这样做: -

//get bitmap
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap);

//scale bitmap
bitmap = Bitmap.createScaledBitmap(bitmap, screenWidth, screenWidth * 0.5625, true);

这将以正确的纵横比(宽度 * 0.5625)的圆圈填充整个屏幕。

然后使其居中:-

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
final SurfaceHolder holder = getSurfaceHolder();
Canvas canvas = holder.lockCanvas();

int x = ( screenHeight - screenWidth*0.5625 ) / 2;

canvas.drawBitmap(bitmap, 0, x, paint);
于 2013-10-10T18:53:32.197 回答