我尝试使用 XML layer-list drawable 创建一个简单的插图。
我有两个形状,一个圆形和一个矩形,
我想要一个不缩放的圆形。
以下是布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ImageView
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/shape5"
android:layout_gravity="center"
android:scaleType="center"
/>
</LinearLayout>
这是 shape5.xml 可绘制对象
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:top="0dp" android:left="0dp">
<shape android:shape="rectangle" android:scaleType="center">
<stroke android:width="2dp" android:color="@android:color/holo_red_light" />
<size android:width="200dp" android:height="100dp"/>
</shape>
</item>
<item android:top="10dp" android:left="10dp">
<shape android:shape="oval" android:gravity="center" android:scaleType="center" >
<stroke android:width="2dp" android:color="@android:color/holo_blue_light" />
<corners android:radius="10dp" />
<size android:width="20dp" android:height="20dp"/>
</shape>
</item>
</layer-list>
生成的绘图如下所示:
很明显,项目 android:top 完成了工作,但没有什么能阻止形状缩放。size width 不起作用, android:scaleType="center" 也不起作用。
我快速查看了 LayerDrawable.java 的实现。似乎在幕后从项目属性创建了一个插图。所以我想通过计算那些我可以达到的结果,我想要。这是唯一的方法吗?
更新:
根据这个答案,我知道操纵项目的 android:top、android:left 等,我可以创建一个虚拟插图,它可以根据需要缩放我的“形状”。我检查了这个,它是正确的。所以这是一种解决方法。然而,我对它的反直觉感到非常失望。我仍然希望有人能指出一种禁用缩放的简单方法。
更新:根据这个 Google Android 文档页面,设置 ImageView scaleType 应该可以防止缩放。显然在我的情况下它不起作用。缺了点什么。