在我的应用程序中,我需要更改按钮的背景颜色以响应某些事件。通过设置创建drawable,设置其绘制并使用该drawable作为按钮背景,可以正常工作:
ShapeDrawable drawable = new ShapeDrawable(roundRectShape);
drawable.getPaint().setColor(color);
b.setBackground(drawable);
现在,我希望将alpha蒙版覆盖到该drawable上,创建一个"条纹"按钮。这里有一个蓝色和黑色按钮的样子(假设白色作为背景颜色,但这些部分应该是100%透明的):
我在Inkscape中制作了这个alpha蒙版,并成功将其作为矢量资源导入。我可能需要将其转换为各种位图,但我不确定。
我已经阅读过一堆文章和提出适用的PorterDuff矩阵的问题,但是还没有能够将这些文章转化为解决我当前的问题。
任何人都知道怎么做?
这是另一个可视化,希望能让事情更清晰。按钮的父视图的背景颜色在这里为淡粉色,按钮边框以红色标出(但在最终产品中应该是不可见的):
答案 0 :(得分:1)
//这会有所帮助。
http://localhost:8000/home/ng_app
//透明在0到255之间; //如果你想使用Bitmap
http://localhost:8000/home/ng_app
答案 1 :(得分:0)
所以,我想出了如何做到这一点,虽然没有使用SVG - 那里有太多问题。
首先,我从使用Button
切换到ImageButton
。然后我应用了以下样式:
<style name="stripedButton">
<item name="android:layout_gravity">left</item>
<item name="android:layout_height">match_parent</item>
<item name="android:stateListAnimator">@null</item>
<item name="android:clickable">true</item>
<item name="android:elevation">0dp</item>
<item name="android:longClickable">true</item>
<item name="layout_widthPercent">70%</item>
<item name="android:src">@drawable/fade_in_bars</item>
<item name="android:tint">@color/RED</item>
<item name="android:background">@null</item>
<!-- Stretch image to fill entire button. -->
<item name="android:scaleType">fitXY</item>
</style>
fade_in_bars
只是原始问题中显示的alpha掩码的png版本。可以使用tint
属性以XML或编程方式设置颜色。我不太明白为什么我需要将背景设置为null,但它看起来很奇怪。最后,需要将scaleType
设置为fitXY,以便显示所有条纹,而不管特定显示器上按钮的大小。
这是它的样子: