Ist es möglich, einen animierten drawable?
Ist es möglich, ein drawable, dass irgendeine Art von animation, ob es eine frame-by-frame-animation, rotation, etc,, die definiert ist als eine xml-drawable und dargestellt werden kann durch eine einzige Drawable-Objekt, ohne sich mit der animation im code?
Wie ich bin, denkt es zu benutzen:
Ich habe eine Liste und jedes Element in dieser Liste kann irgendwann etwas passiert es. Während es passiert ist, ich hätte gerne ein spinning-progress-animation ähnlich wie eine unbestimmte Fortschrittsleiste. Da kann es auch mehrere von diesen auf dem Bildschirm, ich dachte, dass, wenn Sie alle gemeinsam die gleiche Drawable würden Sie brauchen nur eine Instanz im Speicher und Ihre Animationen würde synchronisiert werden, so dass Sie nicht haben, eine Reihe von Spinnen Objekte an verschiedenen Punkten in der drehenden animation.
Ich bin nicht an diesen Ansatz. Ich versuche nur zu denken, die effizienteste Weg, um mehrere Spinnen Fortschritt Animationen und idealerweise haben Sie synchronisiert zusammen, so sind Sie einheitlich in Erscheinung.
Dank
In Reaktion auf Sybiam Antwort:
Habe ich versucht, die Implementierung eines RotateDrawable aber es dreht sich nicht.
Hier ist mein xml für die drawable so weit:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/my_drawable_to_rotate"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="800"
android:visible="true" />
Habe ich versucht, mit, dass drawable als die src-und hintergrund einer Bildansicht und beide Wege nur produziert, ein nicht-rotierendes Bild.
Gibt es etwas, das hat zu Beginn des Bild-Drehung?
- Checkout stackoverflow.com/a/30901885/1052261
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja! Der (undokumentierte) Taste, die ich entdeckt habe durch das Lesen der
ProgressBar
code ist, dass Sie zu rufenDrawable.setLevel()
imonDraw()
um für die<rotate>
Sache zu haben, keine Wirkung. DieProgressBar
funktioniert so etwas (extra unwichtig-code weggelassen):Der drawable XML:
In
onDraw()
:MAX_LEVEL
ist eine Konstante und ist immer 10000 (entsprechend der Dokumentation).ANIM_PERIOD
ist die Zeit der animation in Millisekunden.Leider, da müssen Sie zum ändern
onDraw()
Sie können nicht nur setzen diese drawable in einImageView
seitImageView
nie verpasst dem drawable-Ebene. Jedoch können Sie möglicherweise ändern Sie den drawable-Ebene aus außerhalb dieImageView
's.ProgressBar
(ab)verwendet eineAlphaAnimation
um die Ebene festzulegen. So würde man etwas wie das hier tun:Könnte es funktionieren, aber ich habe es noch nicht getestet.
Bearbeiten
Es ist eigentlich ein
ImageView.setImageLevel()
Methode, so dass es könnte so einfach sein wie:drawable.setLevel()
bequemer ist. eg:ObjectAnimator.ofInt(drawable, "level", 0, 10000)
Drawables
Dort gehen Sie! Und diese für RotateDrawable. Ich glaube, dass von der Doc, es sollte ziemlich straitght vorwärts. Sie können festlegen, alles in eine xml-Datei und legen Sie den hintergrund einer Sicht der drawable xml. /drawable/myrotate.xml -> @drawable/myrotate
Bearbeiten:
Dies ist eine Antwort, die ich hier gefunden.
Drawable Drehen um seinen Mittelpunkt Android
Edit 2:
Du hast Recht die RotateDrawable scheinen gebrochen. Ich weiß nicht wie ich es auch versucht. Ich habe noch nicht geglückt ist, so dass es zu animieren. Aber ich habe succed, um es zu drehen. Sie haben zu verwenden, setLevel, die es zu drehen. Obwohl es sieht nicht wirklich nützlich. Ich durchsucht den code und die RotateDrawable gar nicht aufblasen, die animation Dauer-und die aktuelle rotation scheint seltsam verwenden Sie die Ebene, die als ein Maß für die Drehung. Ich glaube, Sie haben, um es mit einem AnimationDrawable aber auch hier wieder. Es ist einfach abgestürzt bei mir. Ich habe nicht verwendet diese Funktion noch nicht, aber geplant, es zu benutzen in der Zukunft. Ich das web durchsucht und die RotateDrawable scheint zu sein, sehr undokumentierten wie in fast jedem Drawable-Objekte.
RotateDrawable
ist (programmgesteuert) völlig nutzlos vor der Android-API-21. Sie können initialisieren eines aber können Sie nicht sein Kind, noch seine rotation Winkel. Verrückt.Hier ist einer der möglichen Wege (besonders nützlich, wenn Sie haben ein Drawable irgendwo einstellen und animieren müssen es). Die Idee ist, wickeln Sie die drawable und dekorieren Sie ihn mit animation. In meinem Fall, ich hatte, es zu drehen, so unten finden Sie Beispiel-Implementierung:
und Sie können es verwenden, wie diese (rotierende Symbolleiste das Symbol navigation 360 Grad):
Sollte es nicht schwer sein, fügen Sie eine Methode, drehen Sie unbegrenzt (
setRepeatMode INFINITE for animator
)Können Sie beginnen, aus dem Studium der ProgressBar2 aus der API-Demos-Projekt (es ist verfügbar als Teil des SDK). Speziell darauf achten,
R.layout.progressbar_2
.Ebene ist die interpulting Wert von 0 bis 100000. die eigentliche animation-Werte werden festgelegt durch die setter-Methoden