将位图定位在不同的屏幕上

时间:2012-07-09 21:37:14

标签: android resolution dpi

我知道还有很多其他线索。在过去的两天里,我一直在检查它们并没有用,现在它让我疯了。 所以基本上我有一个spritesheet,我将其加载到Bitmap中,将帧分开,对它们执行缩放并将它们加载到列表中以供以后动画使用。从ldpi到xhdpi,缩放看起来很好,动画也是如此。

但另一件事让我感到困扰,那就是在不同设备上的定位。我用canvas.drawBitmap(位图,srcRect,destRect,paint)绘制它们。好吧,我猜代码告诉了超过千字。

//converting dps to pixels
int xCoord = convertToPixels(100);
int yCoord = convertToPixels(150);

//defining destination rectangle; sprite is a Bitmap object
Rect destRect = new Rect(xCoord, yCoord, xCoord+sprite.getWidth(), yCoord+sprite.getHeight());

//drawing
canvas.drawBitmap(sprite, null, destRect, null);

convertToPixels(float dp)只返回一些公式为Math.round(dp * DENSITY)的像素。

我相信如果我指定dps,所有设备上的宽高比应该相同,例如如果我在一个设备的屏幕尺寸的10%上放置一些东西,它应该在另一个更小/更大/更低密度/更密集的屏幕上保持10%。但我猜我的逻辑是有缺陷的,因为它不起作用。它在不同的地方的不同设备上绘制精灵。

总结一下:使用带有x和y coords 100 dps的destRect绘制一个Bitmap对象应该在所有设备上保持与画布大小的比率,或者我应该这样思考。

我很乐意请你帮我解决这个问题,因为我现在迷失了,比字面意义更多。 请不要给我一个指向"支持多个屏幕的链接"开发者网站或类似网站上的主题,因为我已多次阅读它们,但似乎我不理解它们。谢谢!

1 个答案:

答案 0 :(得分:0)

你确定px计算的下降是否正确?我编写了以下代码来执行此操作:

public class ViewHelper {
    public static int getPxFromDip(int dips){
        return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dips, Application.getContext().getResources().getDisplayMetrics());
    }
}

其中Application.getContext()是Application wide上下文,或者提供本地Activity上下文。