我知道还有很多其他线索。在过去的两天里,我一直在检查它们并没有用,现在它让我疯了。 所以基本上我有一个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对象应该在所有设备上保持与画布大小的比率,或者我应该这样思考。
我很乐意请你帮我解决这个问题,因为我现在迷失了,比字面意义更多。 请不要给我一个指向"支持多个屏幕的链接"开发者网站或类似网站上的主题,因为我已多次阅读它们,但似乎我不理解它们。谢谢!
答案 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上下文。