Масштабирование VectorDrawable на API 19 - PullRequest
3 голосов
/ 30 марта 2019

Я пишу приложение для Android с minSdkVersion = 15 (тестирование на 19).Я хотел бы иметь наложение с небольшим изображением телефона в середине.Я добавил нарисованный (xml) ресурс ic_smartphone_black_24dp из стандартных изображений Android и создал ImageView для наложения следующим образом:

<ImageView
    android:id="@+id/overlay"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:alpha="1."
    android:background="@drawable/overlay_full"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>

Это делает наложение, но изображение смартфона растягивается на весь ImageView.: screenshot

Я пытался масштабировать изображение телефона различными способами (читая это , , и многие другие), но ничегоэто сработало.В частности, я попытался:

  • добавить vectorDrawables.useSupportLibrary = true в gradle.build
  • , добавив
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

в Activity

  • изменяя ImageView на android.support.v7.widget.AppCompatImageView (и устанавливая фон в java-коде, а не в xml)
  • передавая wrap_content вместо 0dp как layout_width/height (и снимая ограничения)
  • установка размера в overlay_full:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/overlay_background">
        <size
            android:width="152dp"
            android:height="152dp"/>
    </item>
    <item android:drawable="@drawable/ic_smartphone_black_24dp"
        android:left="30dp"
        android:top="30dp"
        android:right="30dp"
        android:bottom="30dp"
        android:gravity="center"
        android:scaleType="center"
        android:width="30dp"
        android:height="30dp">
        <size
            android:width="30dp"
            android:height="30dp"/>
    </item>
</layer-list>

Код работает, как и ожидалось, в API 28, где я также тестировал.Любая идея, как сделать это масштабирование в более ранних версиях API?

1 Ответ

1 голос
/ 30 марта 2019

Вы можете попробовать что-то вроде этого:

<ImageView
    android:id="@+id/overlay"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:scaleType="center"
    android:background="@drawable/just_the_background"
    app:srcCompat="@drawable/ic_smartphone_black_24dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>

Кроме того, вам не нужно использовать AppCompat представления непосредственно в макетах, просто позвольте библиотеке обработать это для вас (они заменяются автоматически во время сборки). Их нужно использовать только в том случае, если вы расширяете их для добавления пользовательских функций.

...