2011-12-06 43 views
46

Tôi đã viết phương pháp để có được các điểm ảnh từ nhúng nhưng nó không hoạt động. Nó cho tôi lỗi thời gian chạy.Chuyển đổi nhúng sang px trong Android

Thật sự tôi đã chạy phương pháp này trong lớp học riêng biệt và khởi tạo trong lớp học Hoạt động của tôi

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

mã chạy này không đồng bộ. Làm ơn giúp tôi.

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

Bạn gặp phải lỗi gì? boardContext là null? getResources là null? – Sulthan

Trả lời

123

Hãy thử điều này:

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

bạn sẽ trở lại nổi cho pixel như thế nào? Nó có nên được đúc thành int không? – hjchin

+0

Hoạt động, NHƯNG dường như áp dụng w, h cho hoạt động nổi của tôi, android thêm 16dp sang phải và trái (tổng 32dp), ở đó cho dipValue tôi phải vượt qua là dipValue i có trong bố cục xml + 32dp - cố định nó – Mercury

34

Bạn có thể thêm giá trị dp trong dimen.xml và sử dụng

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

Nó dễ dàng hơn ...

0

Hãy thử cách này: Đối với không được chuyển ngữ cảnh

public static float dipToPixels(float dipValue) { 
     return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, Resources.getSystem().getDisplayMetrics()); 
    } 
Các vấn đề liên quan