Как я могу изменить цвет моего текста в зависимости от цвета изображения, которое он накладывает?

Итак, у меня есть прозрачные кнопки с белыми надписями над пользователем 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>

Вы можете установить прозрачный цвет для кнопки. Таким образом, текст кнопки виден, даже если изображение белого цвета. Если все в порядке, не забудьте поднять ответ!

Другие вопросы по тегам