Formel px zu dp, dp zu px android
Ich versuche zu berechnen, eine variable Anzahl von Pixel-density-independent Pixel und Umgekehrt.
Diese Formel (px to dp): dp = (int)(px /(displayMetrics.densityDpi /160));
funktioniert nicht auf kleine Geräte, weil es ist, geteilt durch null.
Dies ist mein dp-px-Formel:
px = (int)(dp * (displayMetrics.densityDpi / 160));
Könnte jemand geben Sie mir einige Hinweise?
Kommentar zu dem Problem
Konvertierung von dp-Einheiten für pixel-Einheiten developer.android.com/guide/practices/...
@Bram: ich denke, deine Formel ist einfach gut. Wie erhalten Sie eine division durch null? displayMetrics.densityDpi werden wahlweise 120, 160, 240 oder 320, nie 0.
Ich Stimme mit @ct_rob . displayMetrics.densityDpi / 160 minimum-Wert von 0,75. Sie müssen die Umwandlung int in der falschen Stelle.
InformationsquelleAutor der Frage Bram | 2011-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: Die weit verbreitete Lösung oben basiert auf
displayMetrics.density
. Aber die docs erklären Sie, daß dieser Wert ist ein gerundeter Wert, verwendet der Bildschirm 'Eimer'. ZB. auf meinem Nexus 10 es gibt 2, wo der Reale Wert wäre 298dpi (real) /160dpi (default) = 1.8625.Je nach Ihren Anforderungen müssen Sie möglicherweise die genaue transformation, die erreicht werden kann, wie diese:
[Edit] Das soll nicht vermischt werden mit den Android-internen dp Gerät, dies ist natürlich noch auf dem Bildschirm Eimern. Verwenden Sie diese, wo Sie wollen eine Einheit, Rendern sollten die gleichen realen Größe auf verschiedenen Geräten.
Konvertieren dp-zu-pixel:
Konvertieren pixel zu dp:
Beachten Sie, dass es xdpi und ydpi Eigenschaften, möchten Sie vielleicht, um zu unterscheiden, aber ich kann mir nicht vorstellen, eine vernünftige Anzeige, wobei diese Werte sich stark unterscheiden.
InformationsquelleAutor der Antwort Bachi
Ich mein problem gelöst, indem die folgenden Formeln. Mögen andere Menschen davon profitieren.
dp px:
px dp:
InformationsquelleAutor der Antwort Bram
px dp:
InformationsquelleAutor der Antwort Ian
Einfach anrufen
getResources().getDimensionPixelSize(R.dimen.your_dimension)
konvertieren vondp
Einheiten, um PixelInformationsquelleAutor der Antwort pelotasplus
Effiziente Möglichkeit, je
DP-zu-Pixel:
Pixel, DP:
Hoffe, dies wird Ihnen helfen.
InformationsquelleAutor der Antwort Hiren Patel
Verwenden Sie Diese Funktion,
InformationsquelleAutor der Antwort Prashant Maheshwari Andro
InformationsquelleAutor der Antwort ct_rob
In den meisten Fällen, Konvertierungsfunktionen sind als Häufig. Wir optimieren können, durch hinzufügen von memoization. So gilt es nicht berechnen, wenn die Funktion aufgerufen wird.
Lassen Sie uns erklären eine HashMap gespeichert wird, die berechneten Werte.
Eine Funktion, die berechnet die pixel-Werte :
Einen memoization Funktion gibt den Wert aus HashMap und hält die Aufzeichnung der vorherigen Werte.
Memoization umgesetzt werden können in unterschiedlicher Weise in Java. Für Java 7 :
Java 8 unterstützt Lambda-Funktion :
Dank.
InformationsquelleAutor der Antwort Parth mehta
versuchen, diese
http://labs.skinkers.com/content/android_dp_px_calculator/
InformationsquelleAutor der Antwort KMI
Unten funtions funktionierte gut für mich auf allen Geräten.
Es ist https://gist.github.com/laaptu/7867851
InformationsquelleAutor der Antwort Blesson Jose
//für immer in Bezug auf Dezimal/Float
________________________________________________________________________________
InformationsquelleAutor der Antwort TRINADH KOYA
Wenn Sie auf der Suche nach einem online Rechner für die Umwandlung von DP, SP, Zoll, Millimeter, Punkte oder Pixel, und von einem anderen an verschiedene Bildschirmauflösungen, dies ist die komplette Werkzeug, das ich kenne.
InformationsquelleAutor der Antwort Paul Lammertsma
Können Sie
[DisplayMatrics][1]
und bestimmen Sie die Bildschirmauflösung. So etwas wie dieses:Ich mich erinnern kann, ist es besser, einen Bodenbelag für die Abstände und Rundungen für Breite.
InformationsquelleAutor der Antwort Houcine
Fühlen Sie sich frei, um diese Methode zu verwenden, die ich schrieb:
InformationsquelleAutor der Antwort Ben Kane
Die Antwort akzeptiert wird oben, ist nicht völlig zutreffend. Nach Auskunft durch Einsichtnahme in Android-source-code:
Resources.getDimension()
undgetDimensionPixelOffset()
/getDimensionPixelSize()
unterscheiden sich nur in der ehemaligen zurückfloat
während die letzteren beiden den gleichen Wert zurückgeben, gerundet aufint
appropriatelly. Für alle von Ihnen, ist der Rückgabewert ist im raw-Pixel.Alle drei Funktionen sind implementedy durch den Aufruf
Resources.getValue()
und umwandeln der so erhaltenenTypedValue
durch den AufrufTypedValue.complexToDimension()
,TypedValue.complexToDimensionPixelOffset()
undTypedValue.complexToDimensionPixelSize()
bzw.Daher, wenn Sie "raw" - Wert zusammen mit der Einheit angegeben, die in der XML-Quelle, nennen
Resources.getValue()
und mit den Methoden desTypedValue
Klasse.InformationsquelleAutor der Antwort Jaromír Adamec
DisplayMetrics displayMetrics = contaxt.getResources()
.getDisplayMetrics();
InformationsquelleAutor der Antwort Sushil Mittal
variation auf ct_robs Antwort oben, wenn Sie mit ganzen zahlen,, die nicht nur verhindert Division durch 0 produziert Sie auch ein brauchbares Ergebnis auf kleinen Geräten:
in integer-Berechnungen mit division für höchste Präzision multiplizieren Sie zunächst vor der Teilung zu reduzieren, abschneiden Effekte.
px = dp * dpi /160
dp = px * 160 /dpi
5 * 120 = 600 /160 = 3
statt
5 * (120 /160 = 0) = 0
wenn Sie möchten, abgerundete Ergebnis hierzu
px = (10 * dp * dpi /160 + 5) /10
dp = (10 * px * 160 /dpi + 5) /10
10 * 5 * 120 = 6000 /160 = 37 + 5 = 42 /10 = 4
InformationsquelleAutor der Antwort user2624395
mit Hilfe von anderen Antworten, die ich schrieb diese Funktion.
InformationsquelleAutor der Antwort Abhishek