2016-10-20 3 views
0

Ich frage mich, ob es eine Möglichkeit gibt, zwei Listener für das gleiche Animationsobjekt zu setzen.Wie legen Sie zwei Animationslistener für dieselbe Animation fest?

Ich habe versucht, zwei Animationslistener zu setzen, aber derjenige, den ich zuerst gesetzt hatte, wurde nur angerufen. Der zweite Listener wird ignoriert.

+0

bitte Ihren Code veröffentlichen, so dass wir –

+1

Anruf ein anderer Zuhörer aus der helfen kann, Listener, der auf Animationsobjekt eingestellt ist. – Toris

+3

Nun, es ist "setAnimationListener" und nicht "addAnimationListener". Dies zeigt an, dass jeweils nur einer möglich ist. Kannst du nicht nur einen Hörer benutzen? Was möchten Sie tun? –

Antwort

0

Ich empfehle dringend Animators anstelle von Animationen, die tatsächlich addListener Methoden haben.

Abgesehen davon besteht die Art, wie Sie mehrere Listener zuweisen, in einem Listener, der andere Listener enthält und die Nachrichten an sie sendet.

public interface Listener { 
    void onEvent(); 
} 

public class CompoundListener implements Listener { 

    private final Collection<Listener> listeners = new CopyOnWriteArrayList<Listener>(); 

    public void addListener(Listener lis) { 
     listeners.add(lis); 
    } 

    public void removeListener(Listener lis) { 
     listeners.remove(lis); 
    } 

    @Override 
    public void onEvent() { 
     for(Listener lis : listeners) { 
      lis.onEvent(); 
     } 
    } 
} 

Dann einfach die CompoundListener auf den Haupt Hörer gesetzt und weisen alle anderen Hörer zum CompoundListener.

0

Einfacher Trick würde

class ListenerWrapper implements Animation.AnimationListener { 

    private List<Animation.AnimationListener> listeners; 

    @Override 
    public void onAnimationStart(Animation animation) { 
     for (Animation.AnimationListener listener : listeners) 
      listener.onAnimationStart(animation); 
    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 

    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 

    } 
} 

.. Etc

sein und für den Rest der Rückrufe das gleiche tun

Verwandte Themen