java - 在 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:
我尝试以各种方式缩放手机的图片(阅读这个、那个和许多其他方式),但都没有奏效。特别是我尝试过:
- 添加
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 版本中进行这种缩放吗?
解决方案
你可以尝试这样的事情:
<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
直接在布局中使用视图,只需让库为您处理(它们会在构建时自动替换)。只有在扩展它们以添加自定义功能时才需要使用它们。
推荐阅读
- vb.net - 反序列化时出现意外的节点类型元素错误
- php - “pecl install memcached”失败
- c - 我只是想将字符串扫描到数组中。我究竟做错了什么?
- java - 根据列表中的所有字段排序
- android - 使用 kodein 在 ViewModelFactory 中注入保存的状态
- r - 如何将数值与另一个数据集中的分类值匹配
- git - Git以未暂存状态添加文件/文件
- android-studio - Android 许可证状态未知 l Flutter 医生
- bash - 使用 BASH,选择行和列 [CUT 命令?]
- python - 扫描 CSV 文件中的 URL 并在网站处于活动/非活动状态时添加 TRUE/FALSE 列