我有一个动态壁纸全部设置(为简单起见,假设它由两个并排放置的旋转位图组成,每个位图以不同的速度旋转;还要注意位图的边缘(不是图像周围的隐形框,而是绘图的实际像素)正在接触。)
我将每个的翻译描述为画布大小的百分比(0到1之间的值乘以c.getHeight()和c.getWidth()(其中c是画布)。)
无论如何,只要保持宽高比,一切都能正常工作。所以xxhdpi和xhdpi @ 1080x1920和720x1280都很好,但是当我在nexus s @ 480x800上运行它时,两个位图不再正确定位。
我不想扭曲我的图像(它们是圆形,必须保持圆形),所以我认为最好的方法是限制画布的大小并使其居中。
所以对于nexus的@ 480x800,我实际上只想画一个450x800的区域,我会在屏幕上居中。
事实上,我总是希望在一个区域内有2个位图,高度=宽度* 0.5625。
我该怎么做呢?
注意:我根据立方体样本制作了动态壁纸。
如果我遗漏任何重要细节,请告诉我,
谢谢!
沃纳
答案 0 :(得分: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);