两种颜色的带状背景?

时间:2012-01-04 12:56:10

标签: android android-layout

我正在尝试使用这样的背景创建一个底栏:

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>

但输出看起来像这样......:

enter image description here

如何获得这个,两个彩色背景? 请建议.. 谢谢

5 个答案:

答案 0 :(得分:19)

正如其他人所指出的那样,在这种情况下,一个九点是理想的(并且不会占用太多内存)。使用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中使用实际视图大小的一半。这意味着每次更改视图高度/布局时都必须调整此drawable。九个补丁会自动调整。

答案 1 :(得分: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:startColorandroid:endColor替换android:angle值和开始/结束颜色来指定角度。

答案 2 :(得分:1)

答案 3 :(得分:1)

如果您愿意放弃使用XML绘制它,我找到了一个解决方案......

借鉴:Gradients and shadows on buttons

这就是你想要的!但不同的颜色,大小和按钮......

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 Layout并单独引用这个Java Button,或者你最终必须用Java而不是XML来制作你的整个布局...这将是SO的另一个问题

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

P.S。我是一个全新的Java并使用位图,所以如果我全力以赴,我会为你的案例发布一个更全面的解决方案。

答案 4 :(得分:0)

你可以创建它的图像并沿x坐标重复它。