2012-07-09 90 views
0

我知道还有很多关于此的其他线程。过去两天我一直无法检查他们,而现在这让我感到疯狂。 所以基本上我有一个spritesheet,我加载到一个位图中,将这些帧分开,对它们执行缩放并将它们加载到列表中以供稍后的动画使用。缩放看起来很好,从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(浮动DP)只是返回一个数与式Math.round(DP *密度)像素。

我相信如果我指定了dps,所有设备上的宽高比应该是相同的,例如,如果我在某个设备的屏幕尺寸的10%上放置了某些东西,则应该在另一个较小/较大/较不密集/较密集的屏幕上保留这10%。但我想我的逻辑是有缺陷的,因为它不起作用。它在不同地方的不同设备上绘制精灵。总结:使用带有x和y坐标的destRect绘制一个Bitmap对象100 dps应该保持所有设备与画布大小的比例,否则我应该这样思考。

我会请你帮助我解决这个问题,因为我现在迷失了,比字面上更像字面意思。 请不要只给我一个在开发人员网站或类似网站上的“支持多屏幕”主题的链接,因为我已经阅读过很多次,但似乎我不明白它们。谢谢!

回答

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()是应用广泛的背景下,或提供当地的活动环境。

+0

我使用了在SO上找到的公式。此外,我尝试了其他公式:添加0.5f(官方主题)的公式,从xdip和ydip计算密度以及上面提供的公式。他们都没有改变结果。我仔细检查确定。不过谢谢。 – x123y234z345 2012-07-10 05:40:44