Android 在两个不同的设备(不同的屏幕密度)上的相同图像上绘制相同的圆
我在两个不同的设备上有一个图像,屏幕大小和密度不同 使用画布,我想在设备a图像上画一个圆,然后将中心坐标发送到设备B,并在相同的位置绘制圆,即使相同的图像具有不同的大小 在发送x坐标之前,我在设备A上执行的操作如下:Android 在两个不同的设备(不同的屏幕密度)上的相同图像上绘制相同的圆,android,android-canvas,android-view,android-screen,Android,Android Canvas,Android View,Android Screen,我在两个不同的设备上有一个图像,屏幕大小和密度不同 使用画布,我想在设备a图像上画一个圆,然后将中心坐标发送到设备B,并在相同的位置绘制圆,即使相同的图像具有不同的大小 在发送x坐标之前,我在设备A上执行的操作如下: float density = getResources().getDisplayMetrics().density; int width = getWidth(); float inchesLength = width/density; float scaledXCenter =
float density = getResources().getDisplayMetrics().density;
int width = getWidth();
float inchesLength = width/density;
float scaledXCenter = xCenter / inchesLength;
我对y坐标做同样的处理
在设备B上,我得到相同的参数,并乘以接收到的英寸长度坐标:
float density = getResources().getDisplayMetrics().density;
int width = getWidth();
float inchesLength = width/density;
float restoredXCenter = scaledXCenter * inchesLength;
我正在AVDs上测试这个。
问题是,每个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);
}
}