无法为我的图层列表绘制设置圆角
Can't get rounded corners for my layer-list drawable
我制作了一个由渐变形状和实心形状组成的可绘制按钮,它们都在这样的图层列表中:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:height="25dp">
<shape android:shape="rectangle" >
<gradient
android:angle="90"
android:startColor="@color/greyDark1"
android:endColor="@color/greyDark2"/>
</shape>
</item>
<item android:top="25dp" android:height="25dp">
<shape android:shape="rectangle" >
<solid android:color="@color/black" />
</shape>
</item>
</layer-list>
但是我无法正确处理边角。
我需要围绕整个形状的圆角,但不是在内部(所以 topRight 和 topLeft 操作上半部分,bottomRight 和 bottomLeft 操作下半部分)。
如果我将两半都设置为 <corners android:radius="8dp">
,则上半部分的底角和下半部分的顶角也会变圆,这不是我想要的。
如果我为上半部分设置 <corners android:topRightRadius="8dp" android:topLeftRadius"8dp">
并为下半部分设置 <corners android:bottomRightRadius="8dp" android:bottomLeftRadius"8dp">
上半部分将是可绘制对象的完整大小,这使得渐变无法正常工作,底角是同样的颜色。
这是我要完成的工作的图像:
有人知道解决办法吗?
编辑:
我得到了一些答案,我对此表示感谢,但遗憾的是它们似乎不起作用。
我从 bofredo 和 Bhuvnesh Chasta 那里得到的答案是这样的:
我从 curiousMind 得到的答案看起来不错,但不是我想要的:
最终编辑:
我已经和我一起工作的人讨论过这个问题,我们都同意让它看起来像这样并不重要,所以我们选择了纯色。
我仍然要感谢所有提供帮助的人,所有当前的答案都会得到赞成票,我会接受 waqaslam 的答案,因为他非常接近我想要的。
试试这个。你应该使用形状中的角来圆角。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
<shape
android:shape="rectangle">
<solid android:color="#b2d1d1ef" />
<corners android:radius="1dp"/>
</shape>
</item>
<item android:right="1dp" android:left="1dp" android:bottom="2dp" android:top="1dp">
<shape
android:shape="rectangle">
<solid android:color="#FFFFFF"/>
<corners android:radius="5dp"/>
</shape>
</item>
我很久以前也遇到过这个问题。你可以找到那个问题HERE
这是来自工作答案:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/cocus_orange"/>
<corners android:radius="15px"/>
<padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" />
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:angle="90"
android:startColor="#880f0f10"
android:centerColor="#880d0d0f"
android:endColor="#885d5d5e"/>
<corners
android:radius="15px" />
</shape>
</item>
</layer-list>
像这样尝试
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#000"
android:startColor="#787575" />
<corners android:radius="8dip" />
我认为这是您使用 xml 最接近您想要的可绘制对象的距离。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<gradient android:startColor="#4e4e4e" android:centerColor="#626262" android:endColor="@android:color/transparent" android:angle="270" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<gradient android:startColor="@android:color/transparent" android:centerColor="#4c4c4c" android:endColor="#1c1c1c" android:angle="270" />
</shape>
</item>
也许您应该使用 9-patch drawable 以获得准确的效果。
今天发现这个问题并解决了,我分享它以防其他人发现它像 OP 想要的那样未解决,并且想知道正确的方法,因为我确定 OP 不再需要它了.
我为每个项目的绘制设置了起始 point/ending 点,顶部的渐变从按钮开始的地方开始,在 20dp 之后结束,底部的渐变在 20dp 之后开始,并在按钮的末尾结束。你甚至可以从附件中看到它与OP想要的结果相同! :)
(我没有 post 图片的 10 个声望。)
Button Preview from Android Studio
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="20dp">
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:startColor="#4e4e4e"
android:endColor="#626262"
android:type="linear"/>
</shape>
</item>
<item android:top="20dp">
<shape
android:shape="rectangle" >
<gradient
android:angle="270"
android:startColor="#4c4c4c"
android:endColor="#1c1c1c"
android:type="linear"/>
<corners android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp"/>
</shape>
</item>
</layer-list>
我制作了一个由渐变形状和实心形状组成的可绘制按钮,它们都在这样的图层列表中:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:height="25dp">
<shape android:shape="rectangle" >
<gradient
android:angle="90"
android:startColor="@color/greyDark1"
android:endColor="@color/greyDark2"/>
</shape>
</item>
<item android:top="25dp" android:height="25dp">
<shape android:shape="rectangle" >
<solid android:color="@color/black" />
</shape>
</item>
</layer-list>
但是我无法正确处理边角。 我需要围绕整个形状的圆角,但不是在内部(所以 topRight 和 topLeft 操作上半部分,bottomRight 和 bottomLeft 操作下半部分)。
如果我将两半都设置为 <corners android:radius="8dp">
,则上半部分的底角和下半部分的顶角也会变圆,这不是我想要的。
如果我为上半部分设置 <corners android:topRightRadius="8dp" android:topLeftRadius"8dp">
并为下半部分设置 <corners android:bottomRightRadius="8dp" android:bottomLeftRadius"8dp">
上半部分将是可绘制对象的完整大小,这使得渐变无法正常工作,底角是同样的颜色。
这是我要完成的工作的图像:
有人知道解决办法吗?
编辑:
我得到了一些答案,我对此表示感谢,但遗憾的是它们似乎不起作用。
我从 bofredo 和 Bhuvnesh Chasta 那里得到的答案是这样的:
我从 curiousMind 得到的答案看起来不错,但不是我想要的:
最终编辑:
我已经和我一起工作的人讨论过这个问题,我们都同意让它看起来像这样并不重要,所以我们选择了纯色。
我仍然要感谢所有提供帮助的人,所有当前的答案都会得到赞成票,我会接受 waqaslam 的答案,因为他非常接近我想要的。
试试这个。你应该使用形状中的角来圆角。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item >
<shape
android:shape="rectangle">
<solid android:color="#b2d1d1ef" />
<corners android:radius="1dp"/>
</shape>
</item>
<item android:right="1dp" android:left="1dp" android:bottom="2dp" android:top="1dp">
<shape
android:shape="rectangle">
<solid android:color="#FFFFFF"/>
<corners android:radius="5dp"/>
</shape>
</item>
我很久以前也遇到过这个问题。你可以找到那个问题HERE
这是来自工作答案:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/cocus_orange"/>
<corners android:radius="15px"/>
<padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp" />
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:angle="90"
android:startColor="#880f0f10"
android:centerColor="#880d0d0f"
android:endColor="#885d5d5e"/>
<corners
android:radius="15px" />
</shape>
</item>
</layer-list>
像这样尝试
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#000"
android:startColor="#787575" />
<corners android:radius="8dip" />
我认为这是您使用 xml 最接近您想要的可绘制对象的距离。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<gradient android:startColor="#4e4e4e" android:centerColor="#626262" android:endColor="@android:color/transparent" android:angle="270" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<corners android:radius="2dp"/>
<gradient android:startColor="@android:color/transparent" android:centerColor="#4c4c4c" android:endColor="#1c1c1c" android:angle="270" />
</shape>
</item>
也许您应该使用 9-patch drawable 以获得准确的效果。
今天发现这个问题并解决了,我分享它以防其他人发现它像 OP 想要的那样未解决,并且想知道正确的方法,因为我确定 OP 不再需要它了. 我为每个项目的绘制设置了起始 point/ending 点,顶部的渐变从按钮开始的地方开始,在 20dp 之后结束,底部的渐变在 20dp 之后开始,并在按钮的末尾结束。你甚至可以从附件中看到它与OP想要的结果相同! :) (我没有 post 图片的 10 个声望。) Button Preview from Android Studio
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="20dp">
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:startColor="#4e4e4e"
android:endColor="#626262"
android:type="linear"/>
</shape>
</item>
<item android:top="20dp">
<shape
android:shape="rectangle" >
<gradient
android:angle="270"
android:startColor="#4c4c4c"
android:endColor="#1c1c1c"
android:type="linear"/>
<corners android:bottomLeftRadius="8dp" android:bottomRightRadius="8dp"/>
</shape>
</item>
</layer-list>