2013-11-20 2 views
2

я продлил LayerDrawable для автоматического изменения значения альфа-при прижала ImageButtons:Пользовательские LayerDrawable: никогда onStateChange не называли

protected class CustomDrawable extends LayerDrawable { 

    protected int _pressedAlpha = 60; 

    public CustomDrawable(Drawable d) { 
     Log.d(TAG, "constructor"); 
     super(new Drawable[] { d }); 
    } 

    /** 
    * Wenn sich der Status auf pressed ändert, soll der Alphawert sich auf _pressedAlpha ändern. Wenn sich der 
    * Status von pressed wieder auf normal ändert soll der ursprüngliche Alphawert gesetzt werden 
    */ 
    @Override 
    protected boolean onStateChange(int[] states) { 

     Log.d(TAG, "status changed: " + states); 

     boolean pressed = false; 

     for (int state : states) { 
      if (state == android.R.attr.state_pressed) 
       pressed = true; 
     } 

     mutate(); 

     if (pressed) { 
      setAlpha(_pressedAlpha); 
     } else { 
      setAlpha(100); 
     } 

     invalidateSelf(); 

     return super.onStateChange(states); 
    } 
} 

конструктору называется и Drawable правильно, но когда я нажимаю ImageButton, метод onStateChange() никогда не вызывается. Может кто-нибудь, пожалуйста, помогите мне?

ответ

2

Я думаю, вам нужно переопределить метод isStateful(). У меня была аналогичная проблема, и добавление этого установил его:

@Override 
public boolean isStateful() { 
    return true; 
} 

Смотрите код с this answer на подобный вопрос.

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