如何将alpha蒙版应用于Android drawable?

时间:2016-04-25 02:18:12

标签: android android-drawable android-button android-vectordrawable

在我的应用程序中,我需要更改按钮的背景颜色以响应某些事件。通过设置创建drawable,设置其绘制并使用该drawable作为按钮背景,可以正常工作:

    ShapeDrawable drawable = new ShapeDrawable(roundRectShape);
    drawable.getPaint().setColor(color);
    b.setBackground(drawable);

现在,我希望将alpha蒙版覆盖到该drawable上,创建一个"条纹"按钮。这里有一个蓝色和黑色按钮的样子(假设白色作为背景颜色,但这些部分应该是100%透明的):

enter image description here

我在Inkscape中制作了这个alpha蒙版,并成功将其作为矢量资源导入。我可能需要将其转换为各种位图,但我不确定。

我已经阅读过一堆文章和提出适用的PorterDuff矩阵的问题,但是还没有能够将这些文章转化为解决我当前的问题。

任何人都知道怎么做?

这是另一个可视化,希望能让事情更清晰。按钮的父视图的背景颜色在这里为淡粉色,按钮边框以红色标出(但在最终产品中应该是不可见的):

enter image description here

2 个答案:

答案 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,以便显示所有条纹,而不管特定显示器上按钮的大小。

这是它的样子:

enter image description here