Программное преобразование dp в px для векторных изображений с автоматическим масштабированием ImageView - PullRequest
0 голосов
/ 20 июня 2020

В приведенном ниже коде 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" />
...