android绘图到画布并设置dpi

android绘图到画布并设置dpi,android,android-canvas,scale,android-drawable,android-bitmap,Android,Android Canvas,Scale,Android Drawable,Android Bitmap,我为高达xxxhdpi的ldpi创建了一些测试资产,并将它们放在相应的可绘制文件夹中。如果我在屏幕的角落画东西,说位置 0,0或0+canvas.getWidth()-bitmap.getWidth() 或者类似的东西,它们在所有设备屏幕上正确对齐 我希望能够在屏幕上的任何地方绘制位图,并在所有设备大小上适当调整它们的比例,但我就是不明白 下面是一个示例屏幕截图,它显示了在两个模拟器上运行的相同代码。 图形代码相同。我能够通过添加一个刻度使油漆正确地缩放线条。位图也会根据其屏幕大小进行缩放,但

我为高达xxxhdpi的ldpi创建了一些测试资产,并将它们放在相应的可绘制文件夹中。如果我在屏幕的角落画东西,说位置
0,0或0+canvas.getWidth()-bitmap.getWidth()

或者类似的东西,它们在所有设备屏幕上正确对齐

我希望能够在屏幕上的任何地方绘制位图,并在所有设备大小上适当调整它们的比例,但我就是不明白

下面是一个示例屏幕截图,它显示了在两个模拟器上运行的相同代码。

图形代码相同。我能够通过添加一个刻度使油漆正确地缩放线条。位图也会根据其屏幕大小进行缩放,但是如何在50个单位的代码中绘制,并使其在所有设备上都为50个单位?

初始化函数

Paint p = new Paint();
p.setColor(Color.RED);
p.setStyle(Paint.Style.FILL_AND_STROKE);
float scale = context.getResources().getDisplayMetrics().density;
p.setStrokeWidth(40*scale);

Bitmap ball = BitmapFactory.decodeResource(context.getResources(), R.drawable.ball);
渲染功能

canvas.drawLine(0, 0, 400, 400, p);
canvas.drawBitmap(ball, 50, 50, null);
canvas.drawBitmap(ball2, 150, 150, null);
从上面的屏幕截图中,您可以看到两个错误。这条线的长度是400像素。现在这只是我选择的一个号码,但在较小的手机上它走得太远了

您还可以看到,它们在一台设备上相距甚远,但在第二台设备上却相互重叠

我们能做些什么来克服这个问题

  • 看起来您的图像在
    drawable
    文件夹中未正确缩放

    根据post
    xxhdpi
    图像必须比
    ldpi
    图像大4倍,即400x400px
    xxhdpi
    )和100x100px
    ldpi

  • 这条线从(0,0)一直延伸到(400400)
    ldpi
    屏幕仅为240x320px,因此右下角坐标为(240320)。你所看到的是完全正常的