【发布时间】:2020-03-09 05:37:37
【问题描述】:
我想制作如下图所示的形状。图中尺寸如下
- 圆形/椭圆大小为 30px
- 圆角矩形高20px,宽65px
- 矩形起点设置为圆心,因此图形总大小为 80 像素。
但是,对于 drawable,我需要响应大小,以便我可以将它用于任何 视图的大小。
我可以通过重叠来创建一个形状,从而产生类似的错觉。我不确定在 android 中是否可以使用布尔类型(图形)。
可绘制的 XML
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<size
android:width="75dp"
android:height="30dp" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:right="60dp">
<shape android:shape="oval">
<solid android:color="@color/colorPrimary" />
<size
android:width="30dp"
android:height="30dp" />
</shape>
</item>
<item android:left="15dp" android:top="10dp" android:bottom="10dp">
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimary" />
<size
android:width="66dp"
android:height="20dp" />
<corners
android:bottomRightRadius="20dp"
android:topRightRadius="20dp" />
</shape>
</item>
</layer-list>
上面的 XML 生成形状如下图所示
当我将形状设置为View 时,它的输出如下图所示
布局 XML
<View
android:layout_width="80dp"
android:layout_height="30dp"
android:background="@drawable/shape_flask"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
输出
如您所见,即使在可绘制和视图形状中定义大小也不会遵守大小纵横比。我敢肯定是我做错了什么。
问题:如何使可绘制形状适用于任何尺寸的视图,同时保持纵横比与 图形中的相同 参考。以及如何为其添加投影。
已编辑
我已经解决了一些尺寸问题,但形状仍然有问题。为了更好地可视化,我为两种形状设置了不同的颜色。
可绘制的 XML
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<size
android:width="80dp"
android:height="30dp" />
<solid android:color="@android:color/transparent" />
</shape>
</item>
<item android:right="60dp">
<shape android:shape="oval">
<solid android:color="@color/colorPrimary" />
<size
android:width="30dp"
android:height="30dp" />
</shape>
</item>
<item android:left="15dp" android:top="5dp" android:bottom="5dp">
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent" />
<size
android:width="66dp"
android:height="20dp" />
<corners
android:bottomRightRadius="20dp"
android:topRightRadius="20dp" />
</shape>
</item>
</layer-list>
但正如您在下面的视图屏幕截图中看到的那样,它不会输出相同的大小和位置。但是,View 代码是一样的。
【问题讨论】:
-
是不是太难了?
标签: android drawable android-drawable xml-drawable