Ich möchte eine SeekBar
auf Leinwand programmgesteuert zeichnen. Ich schrieb Code, um die LayoutParams der SeekBar
basierend auf der Gerätedichte festzulegen. Ich bin mit Schaltergehäuse mit Gerätedichte wieZeichnung auf Leinwand Problem in High-End-Geräte
final DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
if(metrics.densityDpi <= DisplayMetrics.DENSITY_LOW){
zoomBarParams = new LinearLayout.LayoutParams(18,
LayoutParams.FILL_PARENT);
} else if (metrics.densityDpi <= DisplayMetrics.DENSITY_MEDIUM){
zoomBarParams = new LinearLayout.LayoutParams(24,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_HIGH){
zoomBarParams = new LinearLayout.LayoutParams(24,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XHIGH){
zoomBarParams = new LinearLayout.LayoutParams(31,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XXHIGH){
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
}else if (metrics.densityDpi <= DisplayMetrics.DENSITY_XXXHIGH){
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
} else {
zoomBarParams = new LinearLayout.LayoutParams(60,
LayoutParams.FILL_PARENT);
}
Aber das funktioniert nicht in High-End-Geräten wie Samsung Note 5, Galaxy S6 Edge-etc..I glaubt, dass diese Geräte im Dichtebereich XXXHIGH kommt, dann Warum funktioniert das nicht ?? Gibt es eine Beziehung zwischen Gerätedichte und Bildschirmgröße beim Zeichnen auf Leinwand? Jede Hilfe wird sehr geschätzt.
Ich denke, Ihr Problem ist, dass 'densityDpiValue' nicht garantiert ist, genau einer der von' DisplayMetrics' Konstanten angegebenen Dichte zu entsprechen. Nehmen wir an, Sie erhalten eine Dichte von 321 - es wird keinen der Fälle auslösen. Überprüfen Sie die Bereiche. –
Als Nebenfrage - welches Problem versuchen Sie mit einem solchen Schalter zu lösen? Warum nicht stattdessen 'dp' Werte verwenden? –
@DmitryZaitsev Ja. Ich habe meinen Code aktualisiert, um nach der Reichweite zu suchen. Das Problem wurde in Samsung Note 5 und Galaxy S6 Edge gelöst. Aber das Problem besteht immer noch in S6 Edge +.Bitte beachten Sie meinen aktualisierten Code in Frage. – Jas