2015-03-03 5 views
3

Я хотел бы добиться эффекта пульсации, когда кто-то нажимает на мой ImageView, но также имеет разные чертежи для других состояний.Эффект пульсации внутри селектора

У меня есть очень простой ImageView:

<ImageView 
    android:id="@+id/image" 
    android:layout_width="120dp" 
    android:layout_height="120dp" 
    android:clickable="true" 
    /> 

добавить свой фон к нему:

mImage.setBackgroundResource(R.drawable.background_resource); 

Мои Drawable выглядит так:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="false"> 
     <shape 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="oval"> 

      <solid 
       android:color="@android:color/darker_gray"/> 

      <size 
       android:width="80dp" 
       android:height="80dp"/> 
     </shape> 
    </item> 
    <item android:state_selected="true" android:state_pressed="false"> 
     <shape 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="oval"> 

      <solid 
       android:color="@android:color/holo_blue_bright"/> 

      <size 
       android:width="120dp" 
       android:height="120dp"/> 
     </shape> 
    </item> 
    <item android:state_pressed="true"> 
     <ripple android:color="@android:color/holo_blue_dark"> 
      <item android:id="@android:id/mask"> 
       <shape android:shape="oval"> 

        <solid android:color="@android:color/holo_blue_dark"/> 

        <size 
         android:width="120dp" 
         android:height="120dp"/> 
       </shape> 
      </item> 
     </ripple> 
    </item> 
</selector> 

Когда я нажимаю, то фон исчезает вместо того, чтобы показывать эффект пульсации. Другие штаты работают нормально. Любая идея, что я делаю неправильно здесь?

+0

Положите пульсацию на селектор. Ripple drawable уже обрабатывает свое состояние без селектора. –

ответ

0

Посмотрите на этот пример RelativeLayout, который рисует мультипликационный эффект на верхней части представления, когда она нажата:

RippleEffect.java

+0

Я не хочу переопределять эффект пульсации в коде (и поддерживать его), я хотел бы использовать доступные чертежи. – gruszczy

6

Оказывается, у вас по-другому, в для того чтобы пульсация, чтобы показать, что вам нужно включить переключатель внутри пульсации вытяжки

т.е. XML должен выглядеть как

<ripple android:color="@color/ripple_color"> 
    <item android:id="@android:id/mask"> 
     <!-- ripple mask goes here --> 
    </item> 
    <item> 
     <selector> 
      <!-- your selector goes here --> 
     </selector> 
    </item> 
</ripple> 

HTH.

+0

Если ваше стандартное состояние селектора является прозрачным, тогда вам нужно включить только маску, иначе пульсация не будет нарисована. – CopsOnRoad

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