Ist es möglich, ein Zeichenobjekt zu erstellen, das irgendeine Art von Animation enthält, egal ob es sich um eine Frame-für-Frame-Animation, eine Rotation usw. handelt, die als XML-Zeichen definiert ist und durch ein einzelnes Drawable-Objekt dargestellt werden kann mit der Animation im Code?
Wie ich denke, es zu benutzen: Ich habe eine Liste und jedes Element in dieser Liste kann irgendwann etwas passieren. Während es passiert, möchte ich eine drehende Fortschrittsanimation ähnlich einer unbestimmten ProgressBar haben. Da es auch mehrere davon auf dem Bildschirm gibt, dachte ich, dass sie, wenn sie alle dieselbe Drawable hätten, nur eine Instanz davon im Speicher hätten und ihre Animationen würden synchronisiert werden, so dass Sie nicht eine Menge sich drehender Objekte in verschiedenen Punkten hätten in der drehenden Animation.
Ich bin nicht an diesen Ansatz gebunden. Ich versuche nur, die effizienteste Möglichkeit zu finden, mehrere sich drehende Fortschrittsanimationen anzuzeigen und sie idealerweise synchron zu synchronisieren, damit sie konsistent aussehen.
Danke
Als Antwort auf Sybiams Antwort:
Ich habe versucht, ein RotateDrawable zu implementieren, aber es rotiert nicht.
Hier ist mein xml für das Zeichenfeld:
%Vor%Ich habe versucht, das Zeichenbare als Quelle und Hintergrund einer ImageView zu verwenden, und beide Wege erzeugten nur ein nicht rotierendes Bild.
Gibt es etwas, das die Bilddrehung starten muss?
Ja! Der (undokumentierte) Schlüssel, den ich beim Lesen des Codes ProgressBar
entdeckt habe, ist, dass Sie Drawable.setLevel()
in onDraw()
aufrufen müssen, damit die <rotate>
-Ding Wirkung hat. Das ProgressBar
funktioniert in etwa so (extra unwichtiger Code wird weggelassen):
Das Zeichen-XML:
%Vor% In onDraw()
:
MAX_LEVEL
ist eine Konstante und ist immer 10000 (gemäß den Dokumenten).
ANIM_PERIOD
ist der Zeitraum Ihrer Animation in Millisekunden.
Leider, da Sie onDraw()
ändern müssen, können Sie dieses Zeichen nicht einfach in ImageView
einfügen, da ImageView
niemals die Zeichenebene ändert. Sie können jedoch die Zeichenebene von außerhalb der ImageView
ändern. ProgressBar
(ab) verwendet AlphaAnimation
, um die Ebene festzulegen. Du würdest also so etwas tun:
Es könnte funktionieren, aber ich habe es nicht getestet.
Es gibt tatsächlich eine Methode ImageView.setImageLevel()
, also könnte es so einfach sein wie:
Na los! Und dies für RotateDrawable . Ich glaube, dass es vom Doc aus ziemlich gut sein sollte. Sie können alles in einer XML-Datei definieren und den Hintergrund einer Ansicht als ziehbares XML festlegen. /drawable/myrotate.xml - & gt; @ drawable / myrotate
Bearbeiten: Dies ist eine Antwort, die ich hier gefunden habe. Drawable Rotieren um sein Zentrum Android
Bearbeiten 2: Du hast recht, das RotateDrawable scheint kaputt zu sein. Ich weiß nicht, dass ich es auch versucht habe. Ich habe es noch nicht geschafft, es zu animieren. Aber ich habe es geschafft, es zu drehen. Sie müssen setLevel verwenden, das es dreht. Obwohl es nicht wirklich nützlich aussieht. Ich habe den Code durchsucht und das RotateDrawable erhöht nicht einmal die Animationsdauer und die aktuelle Rotation scheint die Ebene seltsamerweise als Maß für die Rotation zu verwenden. Ich glaube, Sie müssen es mit einem Animation Drawable aber hier wieder verwenden. Es ist einfach für mich abgestürzt. Ich habe dieses Feature noch nicht benutzt, aber geplant, es in Zukunft zu verwenden. Ich habe das Web durchsucht und das RotateDrawable scheint wie fast alle Drawable Objekte sehr undokumentiert zu sein.
Hier ist eine der möglichen Möglichkeiten (besonders nützlich, wenn Sie Drawable irgendwo eingestellt haben und animieren müssen). Die Idee besteht darin, das Zeichen zu verpacken und mit Animationen zu dekorieren. In meinem Fall musste ich es drehen, so dass Sie unten eine Beispielimplementierung finden können:
%Vor%und Sie können es so verwenden (rotierendes Symbolleistennavigationssymbol 360 Grad):
%Vor% Es sollte nicht schwer sein, eine Methode hinzuzufügen, die sie unbestimmt rotiert ( setRepeatMode INFINITE for animator
)
Sie können mit dem ProgressBar2 vom API-Demos-Projekt (es ist als Teil des SDK verfügbar). Achten Sie besonders auf R.layout.progressbar_2
.
level ist der interpultierende Wert von 0 bis 100000. Die tatsächlichen Animationswerte werden von den Setter-Methoden
gesetztTags und Links android animation drawable progress-bar