在 API 19 上缩放 VectorDrawable
Scaling a VectorDrawable on API 19
我正在用 minSdkVersion = 15
编写一个 Android 应用程序(在 19 上测试)。我想要一个叠加层,中间有一张 phone 小图片。我从标准 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"/>
这渲染了叠加层,但是smartphone图片被拉伸到整个ImageView:
我尝试以各种方式缩放 phone 的图片(阅读 this, 和许多其他方法),但 none 成功了。特别是我试过:
- 将
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 版本中进行缩放吗?
您可以尝试这样的操作:
<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
视图,只需让库为您处理即可(它们会在构建时自动替换)。只有在扩展它们以添加自定义功能时才需要使用它们。
我正在用 minSdkVersion = 15
编写一个 Android 应用程序(在 19 上测试)。我想要一个叠加层,中间有一张 phone 小图片。我从标准 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"/>
这渲染了叠加层,但是smartphone图片被拉伸到整个ImageView:
我尝试以各种方式缩放 phone 的图片(阅读 this,
- 将
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 版本中进行缩放吗?
您可以尝试这样的操作:
<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
视图,只需让库为您处理即可(它们会在构建时自动替换)。只有在扩展它们以添加自定义功能时才需要使用它们。