2010-08-25 10 views
6

Sto provando a creare un ImageButton trasparente (senza sfondo pulsante) con un selettore personalizzato. Ho il selettore che lavora contro il pulsante, ma ora voglio che i selettori selezionabili si dissolvino a vicenda l'uno sull'altro. Ho visto l'oggetto TransitionDrawable che può essere rappresentato in XML. C'è un modo per connetterlo al mio selezionatore?ImageButton che utilizza le transizioni in Android

Di seguito è riportato il codice di layout XML per creare il pulsante di immagine sullo schermo nell'angolo in basso a sinistra dello schermo. Passa attualmente da un'immagine all'altra, ignorando bruscamente il codice XML di transizione.

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> 

risposta

6

È necessario rilasciare il selettore e utilizzare la transizione direttamente come Drawbutton di ImageButtons. L'animazione stesso deve essere applicato nel codice

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

Dove drawable.reverseTransition(500) invertirà la transizione dallo stato corrente.

Vedere Transition Drawable e anche TransitionDrawable.html#reverseTransition(int) per un'ulteriore spiegazione.

4

Uso transizioni nei selettori

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

risposte sopra è troppo complesso, provate questo

<?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

Attributi "exitFadeDuration" e "enterFadeDuration" vengono utilizzati unicamente il livello API 11 e superiori –