2017-02-11 48 views
0

我正在开发android中的自定义视图。我想在视图中显示路径。所有的观点都是这样硬编码的。在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中则高于基线。如果我不将点与denisty像素相乘,那么xxhdpidevices中的路径太小。 这里是mdpi设备映像。 enter image description here 这里是xxhdpi设备enter image description here

+2

您的onDraw并不需要我n是否考虑屏幕的密度 – Blackbelt

+0

那么如何让各种设备的屏幕相等?我尝试用密度像素乘以点,但它不适合 –

回答

1

问题陈述:如果在1280×720假设(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的恒定比例真实

相关问题