2011-12-06 13 views
46

Ben pikselleri daldırma elde etmek için yazılı yöntem vardı ama çalışmıyor. Bana çalışma zamanı hatası veriyor. Dönüştürme px Android pt için

Aslında ayrı sınıfta bu yöntemi koşuyordu ve bu kod çalıştırmak uyumsuz benim Etkinlik sınıfının

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

başlatılmış. Lütfen bana yardım et.

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; 

    } 
+0

Hangi hatayı alıyorsunuz? boardContext boş mu? getResources boş mu? – Sulthan

cevap

14

formüldür: piksel = dp * (dpi/160), bir 160 dpi üzerinde olması için ekran. Daha fazla bilgi için bkz. http://developer.android.com/guide/practices/screens_support.html.

Sen deneyebilirsiniz: Bu yardımcı olur

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

Umut ...

123

Bu deneyin:

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) 
+5

Piksel için float'a ne verirsiniz? Int'e dökülmemeli mi? – hjchin

+0

İşleri, AMA w, h benim yüzer aktivite benim uygulama, android 16dp sağ ve sol ekler (toplam 32dp), orada geçmek zorunda dipValue için xml + 32dp düzeni vardı dipValue - sabit – Mercury

34

Sen dimen.xml içinde dp değer katmak ve

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

daha kolaydır ...

kullanabilirsiniz
0

Bunu deneyin: bağlamı geçmeden için

public static float dipToPixels(float dipValue) { 
     return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, Resources.getSystem().getDisplayMetrics()); 
    } 
İlgili konular