无法访问RippleDrawable的子级

时间:2015-09-04 20:56:53

标签: android

我有一个使用形状作为背景的ImageView

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#fedc13" />
    <stroke
        android:width="2dp"
        android:color="#cccccc" />
    <size
        android:width="120dp"
        android:height="120dp" />
</shape>

通过代码,我可以轻松更改背景颜色

((GradientDrawable) img.getBackground()).setColor(newColor);

这很有效,但我想在用户按下视图时为&gt; Lollipop添加涟漪效果

所以我将v21的xml修改为

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#FF0000">
    <shape android:shape="oval">
        <solid android:color="#fedc13" />
        <stroke
            android:width="1dp"
            android:color="#00FF00" />
        <size
            android:width="120dp"
            android:height="120dp" />
    </shape>
</ripple>

现在要访问形状,img.getBackground()现在返回一个RippleDrawable,所以我想要获得包含的形状。但是当我做的时候

((GradientDrawable)((RippleDrawable) img.getBackground()).getDrawable(0))
.setColor(newColor)

RippleDrawable没有任何包含的drawable,因此抛出异常。

为什么我无法访问包含的形状?

1 个答案:

答案 0 :(得分:1)

找到它,我没有在涟漪孩子身上添加1 and this is how 3 and this is do you 7 and this is dotoday 标签。用<item>包裹形状解决了它。