Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中的自定义视图在每个设备中看起来都不一样_Java_Android_Android Custom View - Fatal编程技术网

Java android中的自定义视图在每个设备中看起来都不一样

Java android中的自定义视图在每个设备中看起来都不一样,java,android,android-custom-view,Java,Android,Android Custom View,我正在android中开发自定义视图。我想在视图中显示路径。所有的要点都是这样硬编码的 private void loadData(){ float density = getResources().getDisplayMetrics().density; testPath = new Path(); testPath.moveTo(new Point((int) (242*density), (

我正在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中,它位于基线之上。若我不将点与丹尼斯像素相乘,那个么在XXHDP设备中路径太小。 这是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));
}

注:上述公式适用于画布宽度和画布高度的恒定比率

您的onDraw没有考虑屏幕的密度,因此如何使每种设备的屏幕相等?我尝试用密度像素乘以点,但效果不太好