在TextView对象上设置背景并保持涟漪效果

时间:2014-12-20 11:11:42

标签: android background android-imageview textview rippledrawable

我想以编程方式设置TextView对象的背景,但也会产生连锁反应。

我可以使用背景设置为android:selectableItemBackground,但在设置背景时涟漪效果会丢失。

我还尝试将ImageViewTextView放在FrameLayout中。并且将图像设置为不是TextView的背景,而是设置为ImageView的图像:是的,波纹在那里,但它似乎在图像的“后面”。

我是否需要从背景位图创建RippleDrawable?我该怎么做?

2 个答案:

答案 0 :(得分:5)

我和你有同样的问题并使用
修复它 FrameLayout上的android:foreground="?attr/selectableItemBackground"

以下是示例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>

答案 1 :(得分:0)

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);