Android Animation Tutorial und Beispiele.
Im Allgemeinen ist eine Animation ein dynamisches Medium, in dem Bilder oder Objekte so manipuliert werden, dass sie als bewegte Bilder erscheinen.
Zumindest, wenn man [Wikipedia] (https://en.wikipedia.org/wiki/Animation) Glauben schenken darf. Webopedia hingegen definiert eine Animation als eine Bewegungssimulation, die durch die Darstellung einer Reihe von Bildern oder Frames erzeugt wird.
Laut Science World British Columbia ist es nicht die Kunst, Zeichnungen in Bewegung zu bringen, sondern die Kunst, Bewegung zu zeichnen.
Android stellt uns eine Fülle von APIs zur Verfügung, mit denen wir verschiedene View-Objekte animieren können, d. h. immer dann, wenn sich die Benutzeroberfläche als Reaktion auf Benutzeraktionen ändert, sollten wir versuchen, die Layout-Übergänge zu animieren. Animationen sind wichtig, da sie dem Benutzer eine Rückmeldung über seine Aktionen geben. Dies trägt dazu bei, dass sie sich an der Benutzeroberfläche orientieren.
Um Änderungen zwischen zwei Ansichtshierarchien einfach zu animieren, können wir das Android Transitions Framework verwenden. Dieses Framework animiert uns die Ansichten zur Laufzeit. Dazu werden einige der Eigenschaftswerte dieser Ansichten im Laufe der Zeit geändert. Wir erhalten integrierte Animationen für gängige Effekte. Außerdem können wir mit diesem Framework benutzerdefinierte Animationen und Transition Lifecycle Callbacks erstellen.
Wir können über Animationen visuelle Hinweise geben. Diese können dann die Benutzer darüber informieren, was in unserer App vor sich geht. Vor allem, wenn sich der Zustand der Benutzeroberfläche ändert, z. B. wenn neue Inhalte geladen oder neue Aktionen verfügbar werden.
Android stellt uns verschiedene Animations-APIs zur Verfügung.
(a). Bitmap-Animationen
Android bietet zeichenbare Animations-APIs. Diese APIs werden in den meisten Fällen statisch mit einer zeichenbaren Ressource definiert. Wir können sie jedoch auch zur Laufzeit definieren. Diese Animations-APIs ermöglichen es uns, Bitmaps zu animieren.
Weitere Details finden Sie hier.
(b). UI-Sichtbarkeit und Bewegungsanimationen
Oft muss man die Sichtbarkeit oder Position von Ansichten innerhalb eines Layouts manipulieren. In diesem Fall sollten Sie subtile Animationen einbauen, damit der Benutzer versteht, wie sich die Benutzeroberfläche verändert.
Zum Beispiel können Sie:
- verschieben.
- einblenden.
- die Ansichten ausblenden. Dazu können Sie das Property-Animationssystem verwenden, das vom Paket
android.animation
bereitgestellt wird. Dieses Paket ist in Android 3.0 (API Level 11) und höher verfügbar.
Diese APIs funktionieren, indem sie die Eigenschaften unserer View-Objekte über einen bestimmten Zeitraum hinweg aktualisieren. So werden die Ansichten kontinuierlich neu gezeichnet, wenn sich die Eigenschaften ändern.
Weitere Dokumentation finden Sie hier.
(c). Physikbasierte Bewegung
Sie können Animationen erstellen, indem Sie die Physik der realen Welt anwenden, so dass die Animationen natürlich aussehen. Sie sollten zum Beispiel den Schwung beibehalten, wenn sich das Ziel ändert, und weiche Übergänge bei allen Änderungen machen.
Die Android Support Library stellt uns die APIs für die Erstellung dieser Animationen zur Verfügung. Diese APIs wenden tatsächlich die Gesetze der Physik an, um zu steuern, wie Ihre Animationen ablaufen.
(d). Layout-Animationen
Das Transition Framework ermöglicht es uns, Animationen zu erstellen, wenn wir das Layout innerhalb der aktuellen Aktivität des Fragments austauschen. Dies ist jedoch nur in Android 4.4 (API Level 19) und höher möglich.
Dazu geben Sie das Start- und Endlayout an und welche Art von Animation Sie verwenden möchten. Das System ermittelt dann eine Animation zwischen den beiden Layouts und führt diese aus. Auf diese Weise können Sie die gesamte Benutzeroberfläche austauschen oder nur einige Ansichten verschieben/ersetzen.
(e). Animation von Aktivitäten
Sie können auch Animationen für den Übergang zwischen Aktivitäten erstellen. Dies gilt nur für Android 5.0 (API-Level 21)
und höher. Wiederum basiert dies auf dem gleichen Übergangs-Framework, das oben beschrieben wurde, um Layout-Änderungen zu animieren. In diesem Fall erlaubt es uns jedoch, Animationen zwischen Layouts in separaten Aktivitäten zu erstellen.
Wir können einfache Animationen anwenden, wie z. B. das Einschieben der neuen Aktivität von der Seite oder das Einblenden. Wir können auch Animationen erstellen, die zwischen gemeinsamen Ansichten in jeder Aktivität übergehen.
Man ruft startActivity()
auf, übergibt ihr aber ein Bündel von Optionen, die von ActivityOptions.makeSceneTransitionAnimation()
bereitgestellt werden. Dieses Bündel von Optionen kann beinhalten, welche Ansichten zwischen den Aktivitäten geteilt werden, so dass das Transition Framework sie während der Animation verbinden kann.
ObjectAnimator
Android ObjectAnimator Tutorial und Beispiele.
ObjectAnimator ist eine Klasse, die Eigenschaften für Zielobjekte zulässt. Diese Klasse leitet sich von android.animation.ValueAnimator
ab.
Dieser ValueAnimator
ist verantwortlich für die Bereitstellung einer einfachen Timing-Engine für die Ausführung von Animationen, die animierte Werte berechnen und sie auf Zielobjekte setzen.
In den Konstruktoren unseres ObjectAnimators
übergeben wir das Zielobjekt, das animiert werden soll. Wir übergeben auch den Namen der Eigenschaft, die animiert werden soll.
ObjectAnimator API-Definition
ObjectAnimator" leitet sich von der Klasse "ValueAnimator" ab. Beide befinden sich im Paket android.animation
:
public final class ObjectAnimator
extends ValueAnimator
Hier ist ihr Vererbungs-Tee:
java.lang.Object
↳ android.animation.Animator
↳ android.animation.ValueAnimator
↳ android.animation.ObjectAnimator
Einstellen von Animationen
Sie können Animationen sowohl im Code als auch in statischen Xml-Ressourcen einstellen. Hier ist ein Beispiel für die Einstellung mit Xml:
<objectAnimator
android_duration="1000"
android_valueTo="200"
android_valueType="floatType"
android_propertyName="y"
android_repeatCount="1"
android_repeatMode="reverse"/>
Um zu sehen, wie man sie im Code einstellt, fahren Sie mit den folgenden Beispielen fort.
Schnelle ObjectAnimator-Beispiele
1. Einblenden und Ausblenden einer Ansicht mit ObjectAnimator
Unser Ziel ist es, Methoden zu erstellen, die es uns ermöglichen, ein- und auszublenden.
Als erstes wollen wir eine Schnittstelle AnimationListener
erstellen:
public interface AnimationListener {
/**
* We need to make our View visible
* before fade in animation starts
*/
interface OnAnimationStartListener{
void onAnimationStart();
}
/**
* We need to make View invisible
* after fade out animation ends.
*/
interface OnAnimationEndListener{
void onAnimationEnd();
}
}
Wie Sie sehen, ist dies eine Schnittstelle mit zwei Methodensignaturen: onAnimationStart()
und onAnimationEnd()
.
Dann ist hier die Methode, die eine Ansicht einblendet:
/**
* View will appear on screen with
* fade in animation. Notifies onAnimationStartListener
* when fade in animation is about to start.
*
* @param view
* @param duration
* @param onAnimationStartListener
*/
public static void animateFadeIn(View view, long duration, final AnimationListener.OnAnimationStartListener onAnimationStartListener) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f);
objectAnimator.setDuration(duration);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
if (onAnimationStartListener != null)
onAnimationStartListener.onAnimationStart();
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
objectAnimator.start();
}
Wir haben den ObjectAnimator
initialisiert, indem wir die statische Methode ofFloat()
aufgerufen haben.
Dann setzen wir die Dauer, einen Long, den wir über unsere Methode als Parameter erhalten haben. Um die Dauer zu setzen, haben wir die Methode setDuration()
verwendet.
Dann fügten wir unseren AnimatorListener
hinzu, wo wir unsere eigene Methode AnimationListener.onAnimationStart()
innerhalb der Methode onAnimationStart()
der Klasse android.animation.Animator
aufrufen.
Und was ist mit dem Ausblenden?
Nun, auch hier verwenden wir die Klasse ObjectAnimator
. Der Unterschied ist, dass wir dieses Mal die Methode onAnimationEnd()
von unserer eigenen AnimationListener
Schnittstelle aufrufen und dies innerhalb der Methode Animator.OnAnimationEnd()
aus dem android.animation
Paket tun.
/**
* View will disappear from screen with
* fade out animation. Notifies onAnimationEndListener
* when fade out animation is ended.
*
* @param view
* @param duration
* @param onAnimationEndListener
*/
public static void animateFadeOut(View view, long duration, final AnimationListener.OnAnimationEndListener onAnimationEndListener) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 1, 0);
objectAnimator.setDuration(duration);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
if (onAnimationEndListener != null)
onAnimationEndListener.onAnimationEnd();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
objectAnimator.start();
}