Il codice di Erel non fa altro che riportare quello che tu avevi già scritto in quella sorta di Select (hai usato gli IF ma a quelli mi riferisco).
Cioè, il mio smartphone che ha scale 1.5, nella tua IF porta a 240dpi, esattamente come il codice di Erel. Stessa cosa per un emulatore con scale 1 che riporta 160dpi sia con gli IF che con il codice di Erel.
Come hai applicato i risultati Xdpi e Ydpi?
In teoria, avresti dovuto soltanto modificare la formula che avevi usato:
Cm = dpi*1/2.54
con
Cm = Xdpi*1/2.54
ma otterresti lo stesso risultato. A meno che tu non abbia utilizzato un dispositivo con scale "anomalo" che non era previsto dalle tue IF.
Sub Disegna
Private Dens As Double
Private DevLayVal As Float
DevLayVal = GetDeviceLayoutValues.Scale
If DevLayVal = 0.75 Then
Dens=120
Else If DevLayVal= 1 Then
Dens=160
Else If DevLayVal= 1.5 Then
Dens=240
Else If DevLayVal=2 Then
Dens=320
End If
Dim Xdpi,Ydpi As Float
Dim r As Reflector
r.Target = r.GetContext
r.Target = r.RunMethod("getResources")
r.Target = r.RunMethod("getDisplayMetrics")
Xdpi = r.GetField("xdpi")
Ydpi = r.GetField("ydpi")
Log("Xdpi = " & Xdpi)
Log("Ydpi = " & Ydpi)
Private DipXCm As Double
' che io usi questo:
DipXCm = Xdpi / 2.54
' oppure questo:
' DipXCm = Dens / 2.54
' non cambia e non può cambiare assolutamente niente.
Private cnv As Canvas
cnv.Initialize(pnlCentimetro)
Private x1,y1,x2,y2 As Float
y1 = 0
y2 = pnlCentimetro.Height
For c = 0 To 10
x1 = c * DipXCm
x2 = x1
cnv.DrawLine(x1, y1, x2, y2, Colors.Black, 1dip)
Next
End Sub