1

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

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

现在,我想在该可绘制对象上覆盖一个 alpha 蒙版,创建一个“条纹”按钮。以下是蓝色和黑色按钮的外观(假设背景颜色为白色,但这些部分实际上应该是 100% 透明的):

在此处输入图像描述

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

我已经阅读了一堆文章和提到要应用 PorterDuff 矩阵的 SO 问题,但无法将这些转化为解决我当前的问题。

有人知道怎么做吗?


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

在此处输入图像描述

4

2 回答 2

1

//这会有所帮助。

ImageView img = (ImageView) findViewById(R.drawable.yourimage);

img.setAlpha(100);

//透明在0到255之间;//如果要使用Bitmap

Bitmap b = BitmapFactory.decodeResources(getResources(), R.drawable.yourimage);

img.setImageBitmap(b);

img.setAlpha(100);
于 2016-04-25T03:11:25.843 回答
0

所以,我想出了如何做到这一点,尽管没有使用 SVG——那里的问题太多了。

首先,我从使用 a 切换ButtonImageButton. 然后我应用了以下样式:

<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 版本。颜色可以在 XML 中设置,也可以使用tint属性以编程方式设置。我不太明白为什么需要将背景设置为空,但否则看起来很奇怪。最后,需要将 设置scaleType为 fitXY 以便显示所有条纹,而不管特定显示器上按钮的大小。

这是它的样子:

在此处输入图像描述

于 2016-04-27T06:13:52.430 回答