2012-01-04 79 views
9

我想创建这样的背景下底栏:两种颜色的带状背景?

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

如何获取,双色backgro和? 请建议.. 谢谢

+0

检查此.. http://stackoverflow.com/a/9393867/1188978 – SkyWalker 2013-12-03 12:11:55

回答

12

正如其他人指出的那样,在这种情况下九块卡片将是理想的(并且不会占用太多内存)。解决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> 

在这种情况下,你的观点被认为是beeing 40dp高

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

0

您可以创建一个图像并沿x坐标重复。

4

创建gradient.xml在/ RES /绘制:

<?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您的main.xml布局文件/ layout:

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

您可以指定th通过替换android:startColorandroid:endColor来代替android:角度值和开始/结束颜色来改变角度。

+0

45角?这不会产生nibha所要求的。 – TryTryAgain 2012-01-04 13:05:00

+0

但我们需要使用开始颜色和结束颜色.. \ – 2012-01-04 13:12:00

+0

http://www.dibbus.com/2011/02/gradient-buttons-for-android/通过这个代码,它可能会帮助你.... – 2012-01-04 13:21:54

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布局并单独引用此Java Button,或者您将不得不最终使用Java完成整个布局而不是XML ......这将是另一个问题所以。

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

P.S.我是一个全新的Java和使用位图,所以我会发布一个更全面的解决方案为您的情况,如果我把它全部搞清楚。