2015-09-04 4 views
0

У меня есть ImageView, которая использует форму в качестве фонане удается получить доступ к детям RippleDrawable

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

Это прекрасно работает, но я хотите добавить эффект пульсации для> Lollipop, когда пользователь нажимает на вид

Итак, я изменил свой xml для v21 на

<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 не все содержащиеся в нем вводимого коэффициента, поэтому он вызывает исключение.

Почему я не могу получить доступ к содержащейся форме?

ответ

1

Обнаружено, что я не добавлял тег <item> ребенку рябь. Обертывание формы с помощью <item> решило ее.

+0

....

Смежные вопросы