2010-08-25 12 views
6

J'essaie de créer un ImageButton transparent (sans fond de bouton) qui a un sélecteur personnalisé. J'ai le selector fonctionnant contre le bouton mais je veux maintenant que les drawables de sélecteur se fondre dans l'un l'autre. J'ai vu l'objet TransitionDrawable qui peut être représenté en XML. Y a-t-il un moyen de connecter ceci à mon sélecteur? Voici le code de disposition XML pour créer le bouton d'image sur l'écran dans le coin inférieur gauche de l'écran:ImageButton utilisant Transitions dans Android

Il passe actuellement d'une image à l'autre en ignorant brusquement la transition XML.

selector_button.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/transition_normal_to_pressed" /> <!-- pressed --> 
    <item android:state_focused="true" android:drawable="@drawable/transition_pressed_to_normal" /> <!-- focused --> 
    <item android:drawable="@drawable/menu_normal" /> <!-- default --> 
</selector> 

transition_normal_to_pressed.xml

<?xml version="1.0" encoding="utf-8"?> 
<transition xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/menu_pressed" /> 
    <item android:drawable="@drawable/menu_normal" /> 
</transition> 

activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <ImageButton 
     android:id="@+id/btnMenu" 
     android:background="@android:color/transparent" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/selector_button" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentBottom="true" /> 
</RelativeLayout> 

Répondre

6

Vous devez supprimer le sélecteur et utiliser la transition directement en tant qu'imageButtons pouvant être dessinée. L'animation elle-même doit être appliqué dans le code

ImageButton button = (ImageButton) findViewById(R.id.button); 
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable(); 
drawable.startTransition(500); 

drawable.reverseTransition(500) renversera la transition de son état actuel.

Voir Transition Drawable et également TransitionDrawable.html#reverseTransition(int) pour plus d'explications.

4

utilisant des transitions dans les sélecteurs

ImageButton button = (ImageButton) findViewById(R.id.button); 
Drawable d = button.getDrawable.getCurrent(); //or AnyView.getBackground().getCurrent(); for custom background 
     if (d instanceof TransitionDrawable) { 
      TransitionDrawable t = (TransitionDrawable) d; 
      t.startTransition(500); 
     } 
2

réponses ci-dessus est trop complexe, essayez cette

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
android:exitFadeDuration="240" 
android:enterFadeDuration="120" > 
<item android:state_pressed="true" 
    android:drawable="@color/pressed_bg" /> 
<item android:state_pressed="false" 
    android:drawable="@android:color/transparent" /> 
</selector> 
+0

Attributs "exitFadeDuration" et "enterFadeDuration" ne sont utilisés que dans le niveau de l'API 11 et plus –