android 中的自定义视图在每个设备上看起来都不一样
Custom view in android is looking different in every devices
我正在 android 中开发自定义视图。我想在视图中显示路径。所有的点都是这样硬编码的。
private void loadData(){
float density = getResources().getDisplayMetrics().density;
testPath = new Path();
testPath.moveTo(new Point((int) (242*density), (int) (213*density)));
testPath.lineTo(new Point((int) (214*density), (int) (209*density)));
testPath.lineTo(new Point((int) (131*density), (int) (243*density)));
testPath.lineTo(new Point((int) (96*density), (int) (314*density)));
testPath.lineTo(new Point((int) (117*density), (int) (403*density)));
testPath.lineTo(new Point((int) (194*density), (int) (457*density)));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);{
canvas.drawLine(0,200,canvas.getWidth(),200,drawPaint);
canvas.drawLine(0,canvas.getHeight()/2,canvas.getWidth(),canvas.getHeight()/2,drawPaint);
canvas.drawLine(canvas.getWidth()/2,0,canvas.getWidth()/2,canvas.getHeight(),drawPaint);
canvas.drawPath(testPath, drawPaint);
}
但是在 xxhdpi 中屏幕低于基线(中线)。而在 mpdpi 中,它高于基线。如果我不将点与密度像素相乘,则 xxhdpidevices 中的路径太小。
这是 mdpi 设备图像。
这是 xxhdpi 设备
问题陈述:如果假设在 1280x720(16:9) 设备上有一个点 P(10, 20),那么在 480x854 设备(或任何分辨率的设备)上对应的点应该是什么比例 16:9)
解决方案:
public int getGeneralizedValueX(int x) {
return (int) (AppConstants.CANVAS_WIDTH * (x / 1280f));
}
public int getGeneralizedValueY(int y) {
return (int) (AppConstants.CANVAS_HEIGHT * (y / 720f));
}
注意:以上公式适用于 CANVAS_WIDTH 和 CANVAS_HEIGHT
的常数比率
我正在 android 中开发自定义视图。我想在视图中显示路径。所有的点都是这样硬编码的。
private void loadData(){
float density = getResources().getDisplayMetrics().density;
testPath = new Path();
testPath.moveTo(new Point((int) (242*density), (int) (213*density)));
testPath.lineTo(new Point((int) (214*density), (int) (209*density)));
testPath.lineTo(new Point((int) (131*density), (int) (243*density)));
testPath.lineTo(new Point((int) (96*density), (int) (314*density)));
testPath.lineTo(new Point((int) (117*density), (int) (403*density)));
testPath.lineTo(new Point((int) (194*density), (int) (457*density)));
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);{
canvas.drawLine(0,200,canvas.getWidth(),200,drawPaint);
canvas.drawLine(0,canvas.getHeight()/2,canvas.getWidth(),canvas.getHeight()/2,drawPaint);
canvas.drawLine(canvas.getWidth()/2,0,canvas.getWidth()/2,canvas.getHeight(),drawPaint);
canvas.drawPath(testPath, drawPaint);
}
但是在 xxhdpi 中屏幕低于基线(中线)。而在 mpdpi 中,它高于基线。如果我不将点与密度像素相乘,则 xxhdpidevices 中的路径太小。
这是 mdpi 设备图像。
问题陈述:如果假设在 1280x720(16:9) 设备上有一个点 P(10, 20),那么在 480x854 设备(或任何分辨率的设备)上对应的点应该是什么比例 16:9)
解决方案:
public int getGeneralizedValueX(int x) {
return (int) (AppConstants.CANVAS_WIDTH * (x / 1280f));
}
public int getGeneralizedValueY(int y) {
return (int) (AppConstants.CANVAS_HEIGHT * (y / 720f));
}
注意:以上公式适用于 CANVAS_WIDTH 和 CANVAS_HEIGHT
的常数比率