Ist es möglich, ein animiertes Zeichenfeld zu haben?

7

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?

    
cottonBallPaws 10.01.2011, 21:19
quelle

6 Antworten

15

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() :

%Vor%

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:

%Vor%

Es könnte funktionieren, aber ich habe es nicht getestet.

Bearbeiten

Es gibt tatsächlich eine Methode ImageView.setImageLevel() , also könnte es so einfach sein wie:

%Vor%     
Timmmm 21.11.2012 12:09
quelle
7

Drawables

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.

    
Loïc Faure-Lacroix 10.01.2011 23:36
quelle
2

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 )

    
GregoryK 23.08.2016 18:07
quelle
1

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 .

    
Vit Khudenko 10.01.2011 22:23
quelle
0
%Vor%

level ist der interpultierende Wert von 0 bis 100000. Die tatsächlichen Animationswerte werden von den Setter-Methoden

gesetzt     
Kirill Kulakov 09.08.2017 11:59
quelle
0
  

Sie können stateListAnimator

verwenden
%Vor%
  

und bounce

%Vor%     
chry 06.01.2018 15:23
quelle