Как я могу изменить цвет моего текста в зависимости от цвета изображения, которое он накладывает?
Итак, у меня есть прозрачные кнопки с белыми надписями над пользователем ImageView
, Если пользователь загружает изображение в основном белого цвета, то кнопки трудно увидеть, если они не полностью невидимы.
Кто-нибудь знает способ получить средний цвет ImageView
исходная картинка / нарисованная? Если я могу сделать это, я могу сравнить его с определенным порогом, для которого я могу проб и ошибок... Если я могу получить это, то я могу изменить цвет текста на моих кнопках на инвертированную версию этого цвета...или что-то??
Просто идея плевать здесь..
И, конечно, если кто-то знает лучший способ, больше информации будет высоко ценится, спасибо!
3 ответа
Вы можете использовать класс Палитра.
Из руководства разработчика:
Вы можете извлечь заметные цвета из изображения, используя методы получения в
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
класс распознает цвета:
Вы можете использовать Палитру, чтобы получить цвет растрового изображения в просмотре изображений.
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>
Вы можете установить прозрачный цвет для кнопки. Таким образом, текст кнопки виден, даже если изображение белого цвета. Если все в порядке, не забудьте поднять ответ!