在不同的屏幕上定位位图



我知道还有很多其他关于这方面的线索。在过去的两天里,我一直在检查它们,但没有结果,现在它让我发疯了。因此,基本上我有一个精灵表,我将其加载到位图中,将帧剪切开,对它们执行缩放,并将它们加载到列表中,以便稍后进行动画制作。缩放看起来不错,从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%。但我想我的逻辑是有缺陷的,因为它不起作用。它在不同地方的不同设备上绘制精灵。

总之:用destRect绘制一个位图对象,x和y坐标为100 dps,应该在所有设备上保持相对于画布大小的比例,或者我应该这样想。

我恳请你帮我处理这件事,因为我现在迷路了,更多的是字面意义上的而不是象征意义上的。请不要只是在开发者网站或类似网站上给我一个"支持多屏幕"主题的链接,因为我已经读了很多次了,但似乎我不理解它们。非常感谢。

你确定从像素到像素的计算是正确的吗?我写了以下代码来做到这一点:

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

其中Application.getContext()是应用程序范围的上下文,或提供本地活动上下文。

最新更新