В приведенном ниже коде activityCompassBinding.compassFace
- это привязанный к макету ImageView
, содержащий вектор, который можно рисовать с intrinsi c размером 100x100 dp. Для COMPASS_SIDE_DP
установлено значение 100. compassFace
имеет атрибуты layout_height
, layout_width
и scale_type
, которые вызывают масштабирование изображения для заполнения доступного пространства, поэтому преобразование из dp в пиксели не может использовать обычный полноэкранный подход; Мне нужно преобразование в увеличенном масштабе для этого конкретного изображения.
Я мог бы устранить необходимость в константе COMPASS_SIDE_DP
, загрузив базовый VectorDrawable
и вызвав на нем getIntrinsicHeight()
, но это было бы еще хуже . Есть ли способ получить соотношение pxPerDp
непосредственно из ImageView
?
int widthPx = activityCompassBinding.compassFace.getWidth();
double pxPerDp = (double) widthPx / COMPASS_SIDE_DP;
<ImageView
android:id="@+id/compass_face"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/content_compass_display"
android:scaleType="fitCenter"
android:src="@drawable/ic_compass_face"
android:tint="@android:color/darker_gray" />