ti-enxame.com

Converter mergulho em px em Android

Eu tinha escrito método para obter os pixels de mergulho, mas não está funcionando. Isso me dá erro de tempo de execução.

Na verdade, eu estava executando esse método em classe separada e inicializado na minha classe Activity

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

Este código é executado de forma assíncrona. Por favor me ajude.

 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;

    }
50
user961524

A fórmula é: px = dp * (dpi/160), para exibição em uma tela de 160 dpi. Consulte http://developer.Android.com/guide/practices/screens_support.html para obter mais informações.

Você poderia tentar:

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

Espero que isto ajude...

21
oriolpons

Tente o seguinte:

Java

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

Kotlin

fun Context.dipToPixels(dipValue: Float) =
    TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, resources.displayMetrics)
133
Dmytro Danylyk

Você pode adicionar o valor dp em dimen.xml e usar

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

É mais fácil...

38
juancazalla

Tente o seguinte: Para sem passar o contexto

 public static float dipToPixels(float dipValue) {
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, Resources.getSystem().getDisplayMetrics());
    }
2
ExtendedScope