笔记如下
遇见了这样的问题:
为什么偏移呢?
布局文件里
<ImageView
android:id="@+id/iv"
android:layout_width="200dp"
android:layout_height="200dp"
/>
在mainActivity文件里
bitmap = Bitmap.createBitmap((int) (200), (int) (200), Bitmap.Config.ARGB_8888);
这里就要了解一下什么是dp单位
每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。
Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。
例如界面上有一个长度为“80dp”的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。
现在知道问题在哪里了
layout文件中的200dp实际上是存在200×1.5=300个像素,实际上是300×300像素,但是我们在定义"画板"的时候指定的宽高是200×200像素,所以我现在的操作是将200×200像素的图片,放到300×300像素上,因此将200×200"拉长"成300*300,所以感觉偏移了
解决方法:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
float density = metrics.density;//获得对应的dp到px的系数
System.out.println(density);
//先准备我们的画板
bitmap = Bitmap.createBitmap((int) (200*density), (int) (200*density), Bitmap.Config.ARGB_8888);