在Android中绘制3x3厘米的正方形

时间:2013-02-23 01:04:13

标签: android canvas imageview paint

我需要在屏幕上绘制一个3x3厘米的精确正方形,你需要在任何类型的屏幕上作为设计工作的确切尺寸。

三星Ace的结果是2.8厘米,结果并不准确。

...的Java

DisplayMetrics metrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(metrics);

float ld =  30 * metrics.densityDpi * (metrics.density/25.4f);

bitmap = Bitmap.createBitmap((int) ld, (int) ld, Bitmap.Config.ARGB_8888);

canvas = new Canvas(bitmap);
paint = new Paint();

paint.setColor(Color.WHITE);

imageView.setImageBitmap(bitmap);

canvas.drawRect(0, 0, (float) ld, (float) ld, paint);

... XML

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image_view"
        android:scaleType="center"/>

非常感谢

1 个答案:

答案 0 :(得分:3)

我认为您需要在特定方向x和y上使用dpi,例如:

// We want 30/25.4 inches but in dots
float inches = 30/25.4f;

float xdpi = getResources().getDisplayMetrics().xdpi;
float xDots = inches * xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;
float yDots = inches * ydpi;

Paint paint = new Paint();
paint.setColor(Color.WHITE);
canvas.drawRect(0, 0, xDots, yDots, paint);

然后你会有更多的机会,但它们对每部手机都不准确。将此代码放入Android应用程序的onDraw()方法后,我得到了以下结果:

Nexus 7:        2.8 cm
Galaxy Nexus    3.0 cm
HTC Sensation   3.0 cm
HTC Desire HD   2.7 cm

所以在所有情况下都不准确。