我已经在用户上传的ImageView
上设置了透明按钮,这些按钮带有白色文本标签。如果用户上传的图像主要是白色,则按钮很难看到,甚至完全看不见。
有人知道如何获取ImageView
源图片/可绘制区域的平均颜色吗?如果可以做到这一点,我就可以将其与我可以试错的某个阈值进行比较... 如果我可以得到这个,那么我就可以更改按钮上文本的颜色为该颜色的反色...或其他什么颜色?
只是想发表一下想法...
当然,如果有更好的方法,更多信息将不胜感激,谢谢!
我已经在用户上传的ImageView
上设置了透明按钮,这些按钮带有白色文本标签。如果用户上传的图像主要是白色,则按钮很难看到,甚至完全看不见。
有人知道如何获取ImageView
源图片/可绘制区域的平均颜色吗?如果可以做到这一点,我就可以将其与我可以试错的某个阈值进行比较... 如果我可以得到这个,那么我就可以更改按钮上文本的颜色为该颜色的反色...或其他什么颜色?
只是想发表一下想法...
当然,如果有更好的方法,更多信息将不胜感激,谢谢!
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
类如何识别颜色:
您可以使用调色板(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);
}
});
<?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>
您可以将透明颜色设置为按钮视图。这样,即使图像是白色的,按钮文本也是可见的。如果可以的话,请不要忘记点赞答案!