0

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

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

爪哇...

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"/>

非常感谢你

4

1 回答 1

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

因此,并非在所有情况下都是准确的。

于 2013-02-23T01:20:21.107 回答