在两个不同的设备(不同的屏幕密度)上的同一图像上绘制相同的圆圈



我在两个不同的屏幕大小和密度的设备上有一个图像。

使用画布,我想在设备a图像上画一个圆,然后将中心坐标发送到设备B,并在相同的位置画圆,即使同一图像具有不同的大小。

在发送x坐标之前,我在设备A上做的是:

float density = getResources().getDisplayMetrics().density;
int width = getWidth();
float inchesLength = width/density;
float scaledXCenter = xCenter / inchesLength;

对y坐标做同样的处理。

在设备B上,我获得相同的参数并乘以incheslength:

的接收坐标
float density = getResources().getDisplayMetrics().density;
int width = getWidth();
float inchesLength = width/density;
float restoredXCenter = scaledXCenter * inchesLength;

我正在avd上测试这个。问题是,每个AVD的屏幕密度都是1,即使我可以清楚地看到,在较小的设备(设备a)上,同样的图像被完全显示,但占用的空间更小!

这种方法在实际设备上工作时是否有效?

有更好的方法吗?

找到画布的宽度和高度,并通过将宽度和高度除以得到一个比率。这个比率应该乘以每个

值下面是示例代码
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class GameCanvas extends View {
    private Paint paint = new Paint();
    private float canvasWidth;
    private float canvasHeight;
    private float ratio;
    public GameCanvas(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    public void onDraw(Canvas canvas) {
        canvasWidth = canvas.getWidth();
        canvasHeight = canvas.getHeight();
        ratio=canvasWidth/canvasHeight;
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        //canvas.drawRect(30*ratio, 30*ratio, 100*ratio, 200*ratio, paint);
        paint.setStrokeWidth(0);
        paint.setColor(Color.CYAN);
        canvas.drawRect(33*ratio, 60*ratio, 77*ratio, 77*ratio, paint);
        paint.setColor(Color.YELLOW);
        canvas.drawRect(33*ratio, 33*ratio, 77*ratio, 60*ratio, paint);
    }
}

相关内容

  • 没有找到相关文章

最新更新