Ich möchte neu hinzugefügte ListView-Elemente mit einem schönen Effekt hervorheben. Ich dachte, das sei einfach und leicht, aber ich stolperte über ein Problem:
Ich möchte die TransitionDrawable-Animation abspielen und sie nach dem Abschluss zurückspulen. Der neue Artikel wird für einen Moment hochgeladen, und dann wird er mit dem Rest verschmelzen.
TransitionDrawable verfügt über Methoden, um die Animation vorwärts und rückwärts abzuspielen, aber keine, die für die Synchronisation verwendet werden könnten. Ich erwartete eine Möglichkeit, einen Rückruf für die Beendigung der Animation anzugeben, etwa wie folgt:
%Vor%Aber nichts wird von der TransitionDrawable-Klasse unterstützt.
Das Problem ist: Wie wird die TransitionDrawable-Animation abgespielt und wenn sie fertig ist - sofort rückwärts spielen? Ich hatte eine Idee, Timer
class zu verwenden, um die Ausführung des rückwärtigen Teils der Animation zu verzögern, aber diese Lösung sieht für eine so einfache Sache ein wenig zu schwer aus.
Oder sollte ich etwas anderes als TransitionDrawable verwenden? Ich möchte vermeiden, Eigenschaftsanimationen zu verwenden, da ich ältere Geräte unterstützen möchte (und PA sind seit Honeycomb verfügbar).
Ich habe es selbst noch nicht selbst ausprobiert, aber ich würde sagen, dass das, was Sie anstreben, auch mit einer altmodischen View-Animation möglich wäre, einer zwischen um genau zu sein. Statt den Hintergrund drawbar direkt zu manipulieren (vorausgesetzt, dass Sie das gerade tun), könnten Sie möglicherweise denselben Effekt erzeugen, indem Sie die Alpha-Eigenschaft einer View ändern, die genau die gleichen Dimensionen wie das Zeilenlayout hat. Sie können dann sowohl die 'normale' als auch die umgekehrte Animation in einem einzelnen AnimationSet angeben und diese mit einer Verzögerung starten, die auf der ersten basiert. Alternativ bietet Animation einen AnimationsListener , mit dem Sie sich verbinden und benachrichtigt werden können, wenn der Die erste Animation endet und beginnt anschließend mit dem Rückwärtslauf.
Betrachtet man den Quellcode für TransitionDrawable, sehe ich auch einige Möglichkeiten, die aktuelle Implementierung um eine benutzerdefinierte Listener-Schnittstelle zu erweitern. Es sollte nicht zu schwer sein, das Muster, das Sie im Code-Snippet in Ihrer Frage darstellen, tatsächlich zu realisieren.
Ich bin momentan etwas knapp bei der Zeit, also erschießt mir einen Kommentar, falls ihr noch konkretere Hinweise braucht (zB Code-Schnipsel) - ich werde dann versuchen, an diesem Wochenende etwas Zeit zu finden, um euch zu helfen.
Vielleicht könntest du das versuchen:
%Vor% Der obige Code implementiert einen TouchListener für die umgekehrte und vorwärtsgerichtete Überblendung und einen clickListener für Ihre Aktionen. Deshalb rufen Sie in MotionEvent.ACTION_UP
nach v.performClick();
auf. Hoffen Sie, dass dies Ihnen hilft.
Ich habe die Implementierung von TransitionDrawable erweitert (tatsächlich kopiert und modifiziert), um einen repeatCount-Parameter zu akzeptieren, der angibt, wie oft der Übergang vor und zurück erfolgen soll. Siehe RepeatableTransitionDrawable
im folgenden Repository.
Ich plane auch, mehr als zwei Zeichen-Unterstützung hinzuzufügen.
Tags und Links android android-ui