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

时间:2016-07-06 04:05:21

标签: android android-layout user-interface imageview color-detection

所以我有透明的按钮,上传的ImageView用户设置了白色文字标签。如果用户上传的图像大部分是白色,那么如果不完全不可见则很难看到按钮。

有谁知道如何获得ImageView的源图片/可绘制的平均颜色?如果我能做到这一点,我可以将它与某个阈值进行比较我可以试用和错误...如果我能得到这个,那么我可以将我的按钮上的文字颜色改为这种颜色的倒置版本。或者什么?

只是想吐在这里..

当然,如果有人知道更好的方式,我会非常感谢更多信息,谢谢!!

3 个答案:

答案 0 :(得分:3)

您可以使用Palette类。

来自developers guide

  

您可以使用吸气剂从图像中检索突出的颜色   Palette类中的方法,例如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

答案 1 :(得分:1)

您可以使用调色板在图像视图中获取位图的颜色

    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);


                }
            });

答案 2 :(得分:-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>

您可以为按钮视图设置透明色。因此,即使图像为白色,按钮文本也是可见的。如果没关系,别忘了大拇指回答!!