2017-02-11 11 views
0

Ich entwickle benutzerdefinierte Ansicht in Android. Ich möchte den Pfad in der Ansicht anzeigen. Alle Punkte sind so hart codiert.Benutzerdefinierte Ansicht in Android sieht anders aus in jedem Gerät

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); 
} 

Aber in xxhdpi Bildschirm kommt unter die Basislinie (Mittellinie). während In der mpdpi es über die Grundlinie kommt. Wenn ich keine Punkte mit demisty Pixel multipliziere, dann ist der Pfad in xxhdpidevices zu klein. Hier ist mdpi Gerät Bild. Hier enter image description here ist xxhdpi Gerät enter image description here

+2

Ihr OnDraw wahr ist i nicht nehmen n Berücksichtigung der Bildschirmdichte – Blackbelt

+0

so wie Bildschirm gleich in jeder Art von Gerät zu machen? Ich versuche, Punkte mit Dichte-Pixel zu multiplizieren, aber es kommt nicht richtig –

Antwort

1

Problemstellung: Wenn auf 1280x720 annehmen (16: 9) Gerät gibt es einen Punkt sagen, P (10, 20), was den entsprechenden Punkt auf etwa 480x854 Gerät sein soll (oder Vorrichtung jede Auflösung im Verhältnis 16: 9)

Lösung:

public int getGeneralizedValueX(int x) { 
    return (int) (AppConstants.CANVAS_WIDTH * (x/1280f)); 
} 

public int getGeneralizedValueY(int y) { 
    return (int) (AppConstants.CANVAS_HEIGHT * (y/720f)); 
} 

Hinweis: über Formel gilt für konstantes Verhältnis von CANVAS_WIDTH & CANVAS_HEIGHT

Verwandte Themen