Установить фон на объекте TextView и поддерживать эффект ряби

Я хочу установить фон объекта TextView программно, но также иметь для него эффект ряби.

Я могу использовать с фоном, установленным на android:selectableItemBackground, но эффект ряби теряется при настройке фона.

Я также пытался положить ImageView вместе с TextView в FrameLayout, И установить изображение не как фон TextView, но как изображение ImageViewДа, рябь есть, но она, похоже, "позади" изображения.

Нужно ли создавать RippleDrawable из растрового изображения для фона? Как бы я это сделал?

2 ответа

У меня была такая же проблема, как у вас, и я исправил ее
android:foreground="?attr/selectableItemBackground" на FrameLayout.

Вот пример FrameLayout:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/more"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:foreground="?attr/selectableItemBackground">
    <ImageView
        android:id="@+id/discover_carousel_item_image"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center_vertical|center_horizontal"
        android:scaleType="fitXY" />
</FrameLayout>

RippleDrawable является решением:

RippleDrawable newImage = new RippleDrawable(
        new ColorStateList(
                new int[][]{
                        new int[]{android.R.attr.state_pressed},
                        new int[]{}
                },
                new int[] {
                        getResources().getColor(R.color.ripple_material_light),
                        getResources().getColor(R.color.ripple_material_dark),
                }),
                new BitmapDrawable(getResources(), mapBitmap),
                null);
textView.setBackground(newImage);
Другие вопросы по тегам