Gab*_*lai 5 android background colors button rounded-corners
我想在Android上使用两种背景颜色制作按钮样式,如下图所示:
http://i.stack.imgur.com/ExKXl.png
是否可以使用可绘制资源?我正在http://developer.android.com/guide/topics/resources/drawable-resource.html上搜索解决方案,但它们都不能有两种颜色.
有办法吗?
[编辑答案]
解决方案是创建一个<layer-list>
带项目,每个项目<item>
都有一个<shape>
.代码如下(整个按钮的高度为32dp,因此我为每种颜色使用了半高):
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Top color -->
<item android:bottom="16dp">
<shape android:shape="rectangle">
<solid android:color="#FF0000" /> <!-- RED -->
</shape>
</item>
<!-- Bottom color -->
<item android:top="16dp">
<shape android:shape="rectangle">
<solid android:color="#00FF00" /> <!-- GREEN -->
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
但我有另一个问题,我试图在每个形状上设置角落.我试图把android:topLeftRadius
与android:topRightRadius
第一形状android:bottomLeftRadius
和android:bottomRightRadius
第二形状,但它didn't告诉我的角落!因此解决方案是使用android:radius
(所有8个角落变得圆润,该死!)并且另外两个项目来克服额外的角落.最后,XML就是这样的:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Top color with corner -->
<item android:bottom="16dp">
<shape android:shape="rectangle">
<corners android:radius="5dp" /> <!-- It´s obligatory, It didn´t work only with android:topLeftRadius and android:topRightRadius -->
<solid android:color="#FF0000" /> <!-- RED Color-->
</shape>
</item>
<!-- Takes off the center corner -->
<item android:top="8dp" android:bottom="8dp">
<shape android:shape="rectangle">
<solid android:color="#FF0000" /> <!-- RED Color-->
</shape>
</item>
<!-- Bottom color with corner -->
<item android:top="16dp">
<shape android:shape="rectangle">
<corners android:radius="5dp" /> <!-- It´s obligatory, It didn´t work only with android:bottomLeftRadius and android:bottomRightRadius -->
<solid android:color="#00FF00" /> <!-- GREEN Color -->
</shape>
</item>
<!-- Takes off the center corner -->
<item android:top="16dp" android:bottom="8dp">
<shape android:shape="rectangle">
<solid android:color="#00FF00" /> <!-- GREEN Color -->
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
它现在正在工作,谢谢大家!
可能的重复:有两种颜色的带状背景?
其中使用 Java 提供的答案:
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)
Run Code Online (Sandbox Code Playgroud)
摘自同一主题的另一篇 SO 帖子:按钮上的渐变和阴影
以及使用 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>
Run Code Online (Sandbox Code Playgroud)
正如其他人所说:
您可以创建一个9patch 图像,这将是最足智多谋的。