Установить фон на объекте 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);