带有两种颜色的条纹背景?

18
我正在尝试创建一个底部栏,背景应该像这样:enter image description here 我目前正在使用以下代码:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">


    <item>
        <shape>
            <gradient android:endColor="#000000" android:startColor="#696969"
                android:centerColor="#696969" android:angle="270" />
            <stroke android:color="#696969" />
            <padding android:left="2dp" android:top="3dp" android:right="2dp"
                android:bottom="3dp" />
        </shape>
    </item>
</selector>

但是输出结果看起来像这样...

输入图像描述

如何获得这种双色背景?请建议...谢谢


请查看此链接:https://dev59.com/FGDVa4cB1Zd3GeqPgLkN#9393867 - SkyWalker
5个回答

27
正如其他人所指出的那样,在这种情况下,九宫格图案是理想的选择(并且不会占用太多内存)。使用XML进行操作并不是最优的选择。以下是您可以尝试的方法:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:bottom="20dp">
        <shape android:shape="rectangle" >
            <size android:height="20dp" />
            <solid android:color="#ff0000" />
        </shape>
    </item>

    <item android:top="20dp">
        <shape android:shape="rectangle" >
            <size android:height="20dp" />
            <solid android:color="#0000ff" />
        </shape>
    </item>
</layer-list>

在这种情况下,您的视图被认为是40dp高

这是一个具有两个不同颜色块的层列表。使用XML方法的问题在于无法将块的高度调整为百分比(=50%)。您必须使用实际视图大小的一半(以dp为单位)。这意味着每次更改视图高度/布局时都必须调整此可绘制对象。九宫格会自动调整到此。


@user658042 很棒的解决方案。我们可以在这个基础上加入圆角吗?我尝试添加了,但是它没有正确地渲染出来。 - madhuri H R
完美的解决方案,帮了很大的忙! - hetsgandhi

6
在 /res/drawable 中创建 gradient.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFFFF"
        android:endColor="#00000000"/>    
</shape>

在/res/layout文件夹下的main.xml布局文件中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/gradient">   
</LinearLayout>

您可以通过替换android:angle值和android:startColor以及android:endColor来指定角度和开始/结束颜色。

45度角?那不是Nibha所要求的。 - TryTryAgain
请查看此代码,它可能会对您有所帮助:http://www.dibbus.com/2011/02/gradient-buttons-for-android/ - NikhilReddy

1

谢谢,但我不想使用图像...我正在寻找一些编程方式... :) - Nibha Jain

1
我为你找到了一个解决方案,如果你愿意放弃使用XML来绘制它的话...
来源于:按钮上的渐变和阴影 这就是你想要的!但颜色、尺寸不同,并且是一个按钮...
Bitmap bmResult = Bitmap.createBitmap(buttonWidth, buttonHeight, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bmResult); 
    Paint paint = new Paint();
    paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0xFF284560, 0xFF284060, TileMode.MIRROR));
    canvas.drawPaint(paint);
    paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0x55FFFFFF, 0x22FFFFFF, TileMode.CLAMP));
    paint.setMaskFilter(new BlurMaskFilter(3, BlurMaskFilter.Blur.NORMAL));
    canvas.drawRect(0, 0, bmResult.getWidth(), bmResult.getHeight()/2, paint)

...当然是改变颜色。

我不确定你是否可以使用XML布局并仅引用此Java按钮,或者您将不得不最终在Java中制作整个布局,而不是XML...这将是SO的另一个问题。

希望这有所帮助。虽然可能是我的无知,但我也建议走9patch路线。

P.S. 我完全是Java和位图的新手,所以如果我弄清楚了所有内容,我会为您的情况发布更完整的解决方案。


0
你可以创建一个图像,并沿着x坐标重复它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接