Yanıtlar:
Görüntü ölçeği faktörünü kullanarak dps'den piksele dönüştürmeniz gerekir.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
misiniz px
? Teşekkürler.
Biliyorum bu eski bir soru ama ben bu dönüşümü yapmanın çok daha düzgün bir yolunu buldum.
Java
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Kotlin
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
Yukarıdaki PX dönüştürülür istediğiniz DP değerdir
İhtiyacınıza baktığımızda alternatif bir çözüm de var. Derleme zamanında dp'deki boyutları biliyorsunuz, böylece kaynaklara bir dimen girişi ekleyebilirsiniz. Daha sonra, dimen girişini sorgulayabilirsiniz ve bu çağrıda otomatik olarak piksele dönüştürülür:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
Ve dimens.xml dosyasında şunlar bulunur:
<dimen name="dimen_entry_in_dp">72dp</dimen>
Bu fikri genişleterek, 1dp veya 1sp değerini bir dimen girişi olarak saklayabilir ve değeri sorgulayabilir ve bir çarpan olarak kullanabilirsiniz. Bu yaklaşımı kullanarak, kodu matematik öğelerinden yalıtacak ve hesaplamaları yapmak için kütüphaneye güveneceksiniz.
Test edilen en basit yol (ve api 1'den bile çalışır):
getResources().getDimensionPixelSize(R.dimen.example_dimen);
Belgelerden:
Ham piksellerde boyut olarak kullanılmak üzere belirli bir kaynak kimliği için bir boyut alın. GetDimension (int) ile aynıdır, ancak döndürülen değer boyut olarak kullanmak için tamsayı piksele dönüştürülür. Bir boyut dönüşümü, taban değerinin yuvarlanmasını ve sıfır olmayan bir taban değerinin en az bir piksel boyutunda olmasını sağlar.
Evet değeri yuvarlıyor ama çok kötü değil (sadece hdpi ve ldpi cihazlarındaki tek değerlerde ldpi çok yaygın olmadığında biraz değer katmak gerekiyor) 4dp'yi 16'ya (piksel) dönüştüren bir xxhdpi cihazında test ettim ve doğru.