2016-07-09 19 views
0

Ich habe eine harte Zeit, dies richtig zu machen.Converting dp in Pixel für die Unterstützung mehrerer Bildschirme

Grundsätzlich erstelle ich ein ImageView und einen LayoutParameter darauf anwenden.

LayoutParams lp = new LayoutParams(width, height); 
lp.gravity = Gravity.CENTER; 

Ich weiß, dass width und height Parameter Pixelzahl erhalten, so dass ich vorbei sie in DP und es auf absolute Pixel Umwandlung mit:

public int convertToPixels(float dpSize){ 
    final float density = getResources().getDisplayMetrics().density; 
    return ((int) (dpSize * density + 0.5f)); 
} 

Soweit ich weiß, soll dies ein ziehbar machen füllen Sie genau die gleiche Fläche in verschiedenen Bildschirmen, richtig? Leider passiert das überhaupt nicht.

Ist etwas falsch mit diesen Methoden, die ich verwende?

Diese zwei Emulatoren unten haben das gleiche Bild und die gleiche Menge an DP. Linke Emulator ist 1.0 Dichte und rechts ist 2.0. Warum sieht es noch so aus? so anders? undertand nicht ..

enter image description here

Antwort

1

Verwendung:

public class Convert {

public static float convertDpToPixel(float dp){ 
     DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
     float px = dp * (metrics.densityDpi/160f); 
     return Math.round(px); 
     } 

}

Verwenden Sie einfach es in einer statischen Weise:

float requiredPixel = Convert.convertDpToPixel(16.0); 

Für weitere Informationen: https://developer.android.com/guide/practices/screens_support.html

+0

Saini, werfen Sie einen Blick auf meine Bearbeitung .. Warum sieht es nicht richtig aus sogar mit der gleichen dp Menge? – AndroidDev

+0

funktioniert mein Code für Sie? – Saini

+0

es ist sicher, dass die Berechnung korrekt ist, aber die Bilder sind immer noch unterschiedlich in Termen der Größe – AndroidDev

Verwandte Themen