我的图层列表drawable无法获得圆角

时间:2016-03-15 11:04:46

标签: android xml drawable rounded-corners 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 op上半部分和bottomRight和bottomLeft下半部分。)

如果我将<corners android:radius="8dp">的两半设置为上半部分的底角,而下半部分的顶角也是圆形的,那就不是我想要的了。

如果我为上半部设置<corners android:topRightRadius="8dp" android:topLeftRadius"8dp">,为下半部设置<corners android:bottomRightRadius="8dp" android:bottomLeftRadius"8dp">,则上半部分将是可绘制的完整尺寸,使渐变不正常,底角是相同的颜色太

以下是我想要完成的事情的图像:

ButtonDrawable

有人知道解决方案吗?

修改

我已经得到了一些答案,我很感激,但遗憾的是它们似乎没有用。

我从bofredo和Bhuvnesh Chasta得到的答案产生了这样的结果:

ButtonDrawable wrong (looks a bit like a burger)

我从curiousMind得到的答案看起来很不错,但不是我的目标:

ButtonDrawable wrong (although it looks pretty nice)

最终编辑:

我和我合作的人讨论了这个问题,我们都同意让它看起来像这样并不重要,所以我们选择了纯色。

我仍然要感谢所有帮助过的人,所有目前的答案都会得到一个赞成,我会接受waqaslam的回答,因为他非常接近我想要的。

5 个答案:

答案 0 :(得分:2)

我认为这是您使用xml最接近所需绘图的方式。

enter image description here

<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来获得确切的效果。

答案 1 :(得分:1)

试试这个。您应该使用圆角形状的角落。

<?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>

答案 2 :(得分:1)

我很久以前也遇到过这个问题。您可以找到该问题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>

答案 3 :(得分:1)

试试这个

<?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" />

答案 4 :(得分:0)

今天找到了这个问题并解决了,我分享了这个问题,以防其他人发现OP想要解决该问题,并且想知道正确的方法,因为我确定OP不再需要它了。 我为每个项目的绘制设定了起点/终点,顶部的渐变从按钮开始的地方开始,在20dp之后结束,底部的梯度在20dp之后开始,并在按钮的末端结束。您甚至可以从附件中看到它与OP的所需结果相同! :) (我没有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>