首页 > 解决方案 > 在 API 19 上缩放 VectorDrawable

问题描述

我正在用minSdkVersion = 15(在 19 上测试)编写一个 Android 应用程序。我想在中间有一张小手机图片的叠加层。我从标准 Android 的图片中添加了可绘制 (xml) 资源ic_smartphone_black_24dp,并为叠加层创建了一个 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:截屏

我尝试以各种方式缩放手机的图片(阅读这个那个和许多其他方式),但都没有奏效。特别是我尝试过:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

到活动

<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 版本中进行这种缩放吗?

标签: javaandroidandroid-drawablescalingandroid-vectordrawable

解决方案


你可以尝试这样的事情:

<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直接在布局中使用视图,只需让库为您处理(它们会在构建时自动替换)。只有在扩展它们以添加自定义功能时才需要使用它们。


推荐阅读