我想创建一个渐变背景,渐变在上半部分,在下半部分有一个纯色,如下图所示:

我不能,因为中心色展开覆盖底部和顶部。

我如何制作一个像第一张图片一样的背景?我怎么做一个小的中心色,不展开?

这是上面后台按钮的XML代码。

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <gradient 
        android:startColor="#6586F0"
        android:centerColor="#D6D6D6"
        android:endColor="#4B6CD6"
        android:angle="90"/>
    <corners 
        android:radius="0dp"/>


</shape>

当前回答

你可以通过使用xml图层列表来创建这种“半渐变”外观,将顶部和底部的“带”合并到一个文件中。每个带都是一个xml形状。

查看之前关于SO的回答,了解详细教程:多梯度形状。

其他回答

为什么不创建一个图像或9补丁图像并使用它?

下面的链接提供了一个很好的指南:

http://android.amberfog.com/?p=247

如果你坚持使用Shape,试试下面的网站(选择左下角的Android): http://angrytools.com/gradient/

我已经创建了一个类似的梯度(不精确),你有一个在这个链接: http://angrytools.com/gradient/?0_6586f0,54_4B6CD6,2_D6D6D6&0_100,100_100&l_269

你可以通过使用xml图层列表来创建这种“半渐变”外观,将顶部和底部的“带”合并到一个文件中。每个带都是一个xml形状。

查看之前关于SO的回答,了解详细教程:多梯度形状。

//Color.parseColor() method allow us to convert
// a hexadecimal color string to an integer value (int color)
int[] colors = {Color.parseColor("#008000"),Color.parseColor("#ADFF2F")};

//create a new gradient color
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, colors);

gd.setCornerRadius(0f);
//apply the button background to newly created drawable gradient
btn.setBackground(gd);

此处参考 https://android--code.blogspot.in/2015/01/android-button-gradient-color.html

试试这个:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >

    <gradient
        android:angle="90"
        android:centerColor="#555994"
        android:endColor="#b5b6d2"
        android:startColor="#555994"
        android:type="linear" />

    <corners 
        android:radius="0dp"/>

</shape>

简单的方法

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <gradient
        android:startColor="@color/choclate_light1"
        android:centerColor="@color/choclate_light"
        android:endColor="@color/choclate"
        android:angle="90"/>
    <!--If you need then use Corners-->
    <!--<corners
        android:radius="@dimen/_20sdp"/>-->
</shape>