我想知道是否有人可以帮助我在我的计划方面让我的逻辑正确。 我在其画布上有一个表面视图,我正在绘制一个位图。 我发现这段编码可以解决不同分辨率和屏幕密度的位图大小问题。
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
Point size = new Point();
display.getSize(size);
Log.e("XXX", "Display w/h: " +size.x + "/" + size.y);
bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.speedo);
int width = bmp1.getWidth();
int height = bmp1.getHeight();
Log.e("XXX", "w/h: " + width + "/" + height);
float scaleWidth = metrics.scaledDensity;
float scaleHeight = metrics.scaledDensity;
Log.e("XXX", "w/h: " + scaleWidth + "/" + scaleHeight);
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
bmp2 = Bitmap.createBitmap(bmp1, 0, 0, width, height, matrix, true);
我在Canvas上绘制后,已在3台设备上记录了我的值。
我制作的图像(位图)(在Adobe中)为800 x 179像素@ 72像素/英寸
GENYMOTION中的=它出现在267 x 60
在Lg =它出现在400 x 90
在OnePlus1中=出现在800 x 179
我知道尺寸是如何根据尺度而变化的,但是在1plus1中虽然说长度为800,但它比屏幕长,即1980年!怎么可能? 有人可以向我解释究竟发生了什么的逻辑吗?
答案 0 :(得分:0)
是的,我发现了原因: - 因为我的RnD错误。
创建bmp2然后绘制后,我没有测量它。所以它实际上是800x3 = 2400,这是> 1980年(屏幕长度)!