如何根据ImageView的颜色更改文本的颜色?

5

我已经在用户上传的ImageView上设置了透明按钮,这些按钮带有白色文本标签。如果用户上传的图像主要是白色,则按钮很难看到,甚至完全看不见。

有人知道如何获取ImageView源图片/可绘制区域的平均颜色吗?如果可以做到这一点,我就可以将其与我可以试错的某个阈值进行比较... 如果我可以得到这个,那么我就可以更改按钮上文本的颜色为该颜色的反色...或其他什么颜色?

只是想发表一下想法...

当然,如果有更好的方法,更多信息将不胜感激,谢谢!


1
请查看此链接:https://dev59.com/dmct5IYBdhLWcg3wCJB- - Vickyexpert
2
...更好的方式...- 您可以使用透明渐变背景来保护按钮免受图像影响,就像在材料设计指南https://material.google.com/style/imagery.html#imagery-ui-integration(文本保护)中所解释的那样。正如其中一个答案提到的那样,您可以使用调色板库提取颜色,但仍然无法获得100%的保护,因为您可能会在图像下方的白色背景上结束。 - user
@Luksprog 是的,我考虑过那个方法,但我认为这可能只是一个临时解决方案。添加渐变叠加是个好主意,我会考虑使用它。谢谢! - Riptyde4
3个回答

4
您可以使用调色板类。
开发者指南中:
您可以使用Palette类中的getter方法(例如Palette.getVibrantColor())从图像中检索突出颜色。 Palette.from()需要一个Bitmap参数,因此您需要从您的ImageView获取它。
以下示例代码可能会有所帮助:
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
Palette colorPalette = Palette.from(bitmap).generate();

然后您可以在此Palette实例上调用适当的方法来获取突出显示的颜色,例如:

int darkVibrantColor = colorPalette.getDarkVibrantColor(someDefaultColor);

看看这个示例截图,了解 Palette 类如何识别颜色:

enter image description here


非常好,谢谢!我会看看明天能否完成这个任务。我会再联系你的。 - Riptyde4

1

您可以使用调色板(Palette)获取ImageView中位图的颜色。

    bitmap = BitmapFactory
                    .decodeResource(getResources(), R.drawable.header);

            Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
                @Override
                public void onGenerated(Palette palette) {

                     //Set normal shade to textview
                    int vibrantColor = palette.getVibrantColor(R.color.primary_500);

                     //Set darkershade to textview
                    int vibrantDarkColor = palette
                            .getDarkVibrantColor(R.color.primary_700);


                }
            });

是的,它运行良好,您认为问题出在哪里? - Hitesh Sahu

-1
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent">

    <FrameLayout 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="110dp"
            android:layout_height="110dp"
            android:layout_gravity="top|center"
            android:background="@drawable/noimage"
            android:scaleType="fitXY" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center"
            android:text="Upload image"
            android:textColor="#fff"
            android:background="#34000000" />

    </FrameLayout>
</LinearLayout>

您可以将透明颜色设置为按钮视图。这样,即使图像是白色的,按钮文本也是可见的。如果可以的话,请不要忘记点赞答案!


我觉得你误解了。按钮背景是透明的,但按钮文本是可见的。问题在于按钮文本是白色的,所以当我的按钮所在的imageview具有白色背景时,你看不到按钮。我的目标是在背景颜色为白色(或类似白色)时将按钮文本从白色更改为黑色或其他颜色。 - Riptyde4
1
好的,那么您应该从图片中提取颜色,并基于此更改文本颜色,您可以参考这个示例 "https://chris.banes.me/2014/07/04/palette-preview/" @Ripyde4 - Anantha Babu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接