在 Android 中动态且顺序地用颜色填充图像视图或位图

Posted

技术标签:

【中文标题】在 Android 中动态且顺序地用颜色填充图像视图或位图【英文标题】:Fill a image view or bitmap with color in Android dynamically and sequentially 【发布时间】:2016-01-14 11:20:54 【问题描述】:

我在 android 中有一个位图,可以与 imageview 或通过画布一起使用。我有一个心形位图,我需要用颜色动态填充它,我必须用颜色填充心脏的内部。只有内心的部分需要被填满,而外面的部分必须被忽略。我已经处理过类似的问题,但是我使用 Canvas 来绘制心脏,现在我需要使用心形结构的位图来为心脏填充颜色。

我之前的问题是here

例如,考虑以下图像:

心脏图像的形状实际上是一个完美的正方形,心脏轮廓的两侧都有白色背景。所以,我的问题是如何在这张图片中找到心脏的内部。在我之前的问题中,有画布,可以得到一个想法并实现,但在这种情况下,我没有太多的想法来解决这个问题。

任何帮助或参考将不胜感激。

更新:

当我开始回答这个问题时,我的心脏有一个白色背景,但现在我有一个半透明图层,心脏有背景色。

Here is what I have

代码:

            <RelativeLayout
                android:layout_
                android:layout_
                android:id="@+id/first_heart_beat"
                android:layout_centerInParent="true"
                android:layout_below="@+id/member_name_heart_beat"
                >

                <RelativeLayout
                    android:layout_
                    android:layout_
                    android:id="@+id/first_heart_beat_filled_relative"
                    android:background="@color/heart_filled_color"
                    android:layout_alignLeft="@+id/first_heart_imageview"
                    android:layout_alignRight="@+id/first_heart_imageview"
                    android:layout_alignParentBottom="true">

                </RelativeLayout>

                <ImageView
                    android:layout_
                    android:layout_
                    android:src="@drawable/heartwhite2"
                    android:id="@+id/first_heart_imageview"
                    android:layout_alignParentBottom="true"
                    />

                <TextView
                    android:layout_
                    android:layout_
                    android:layout_centerInParent="true"
                    android:text="0 %"
                    android:padding="2dp"
                    android:id="@+id/heart_filled_percentage_text"
                    android:textSize="9sp"
                    android:gravity="center"/>


            </RelativeLayout>

使用此代码,我根据用户填写的数据量动态增加first_heart_beat_filled_relative 的高度。但由于背景也是半透明的,我无法实现我想要的。有什么解决方法吗?

【问题讨论】:

【参考方案1】:

如果心脏的内部是透明的(你说心脏正方形的外部元素是白色的),然后将图像放入容器(与图像相同尺寸的RelativeLayout或LinearLayout)并设置背景颜色以编程方式删除该容器。

【讨论】:

所以如果我让内心的部分变得透明,我就能达到我想要的? 是的。您必须访问活动中的底层布局,但它只是使用 setBackgroundColor() 设置背景颜色 我想我明白了,我从没想过会这么简单。我的意思是,我不这么想真是太愚蠢了,我不知道透明度部分。你为我节省了很多时间。 我的 UI 做了一些小改动,我现在正在创建相同的心,但背景不同,背景是半透明的,不是白色的。它是一种纯色,具有一定的透明度。我似乎不能让心脏的外部背景为半透明颜色,因为它看起来有点奇怪。关于如何克服这种情况的任何想法? 所以看起来很奇怪,因为更改 Layout 背景颜色会使外心半透明也变成不想要的颜色?我想我可以看到一个解决方案:让两个图像相互叠加,都带有透明的心。底部图像具有白色外层,上层图像具有半透明外层。更改布局背景颜色不应穿透底部图像。

以上是关于在 Android 中动态且顺序地用颜色填充图像视图或位图的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像设置为画布背景而不是让它在 Android Studio/JavaScript 中填充颜色

在android中动态改变SVG图像颜色

如何根据前景图像在android中动态更改状态栏的颜色?

如何使用 CSS 填充 SVG [重复]

面试题 08.10. 颜色填充(dfs)

#yyds干货盘点# LeetCode程序员面试金典:颜色填充