在API 19上缩放VectorDrawable

时间:2019-03-30 13:12:38

标签: java android android-drawable scaling android-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:screenshot

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

  • vectorDrawables.useSupportLibrary = true添加到gradle.build
  • 添加
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

到活动

  • 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 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

ModelName

此外,您无需直接在布局中使用Person视图,只需让库为您处理即可(它们会在构建时自动替换)。仅在扩展它们以添加自定义功能时才需要使用它们。