最近在Android上做一个连连看的练习,在屏幕上显示出游戏图片的布局后发现点击图片之后总是定位不准,后来发现原因是我用的图片的分辨率是40×40,但在系统中取得图片资源后使用getWidth()和getHeight()方法获取宽度和高度都成了60×60,我之前一直使用40为单位来进行定位的计算,后来改成60后定位就准确了,求解这是为什么呢?要用的图片全部只放在drawable-mdpi里面,测试用的手机分辨率为480×854 218ppi。所有的图片都是使用canvas.drawBitmap(pieces[i][j].getImage().getImage(), pieces[i][j].getBeginX(), pieces[i][j].getBeginY(),null);方法来绘制的。
------解决方案--------------------
由于安卓设备的屏幕分辨率差异很大,看上去一样的大小,实际宽高是不一样的,楼主用的时候要按照比例计算的。
在设计界面的时候都用dp为单位,但编程中好像不行,下面的代码可用来将dp转为实际像素:
static float fzoom = 0f;
/**
* 计算按照屏幕比例缩放后的尺寸
* @param context
* @param size
* @return
*/
public static int zoom(Activity context, int size){
if(fzoom == 0f){
WindowManager windowManager = context.getWindowManager();
Display display = windowManager.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
fzoom = metrics.density;
}
return (int)(size * fzoom);
}