53 votes

Convertir dip en px sous Android

J'avais écrit la méthode pour obtenir les pixels de dip mais cela ne fonctionne pas. Cela me donne une erreur d'exécution.

En fait, j'exécutais cette méthode dans une classe séparée et initialisée dans ma classe d'activité

 Board board = new Board(this);
board.execute(URL);
 

Ce code est exécuté de manière asynchrone. Aidez-moi, s'il vous plaît.

  public float getpixels(int dp){

        //Resources r = boardContext.getResources();
        //float px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpis, r.getDisplayMetrics());

         final float scale = this.boardContext.getResources().getDisplayMetrics().density;
            int px = (int) (dp * scale + 0.5f);



        return px;

    }
 

140voto

Dmytro Danylyk Points 6911

Essaye ça:

 public static float dipToPixels(Context context, float dipValue) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
}
 

43voto

juaniyot Points 13

Vous pouvez ajouter la valeur dp dans dimen.xml et utiliser

int pixels = getResources().getDimensionPixelSize(R.dimen.idDimension);

C'est plus facile...

24voto

oriolpons Points 1152

La formule est la suivante: px = dp * (dpi / 160), pour avoir un écran de 160 dpi. Voir http://developer.android.com/guide/practices/screens_support.html pour plus d'informations.

Tu pourrais essayer:

 public static int convertDipToPixels(float dips)
{
    return (int) (dips * appContext.getResources().getDisplayMetrics().density + 0.5f);
}
 

J'espère que cela t'aides...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X