Animation: Rotierende Bitmap (ImageView)

  • 2 Antworten
  • Letztes Antwortdatum
znieh99

znieh99

Fortgeschrittenes Mitglied
12
Dies ist ein Beispiel, wie man eine Bitmap als ImageView einblenden, rotieren und wieder ausblenden kann. Ich habe dazu eine .png Datei mit einer Größe von 50 x 50 gewählt, welche eine Spirale darstellt.

Schritt 1:
Im 'res' Verzeichnis einen Ordner erstellen (ich habe ihn 'anim' genannt).
Im Ordner 'anim' eine '.xml' Datei (ich habe sie 'rotate.xml' genannt) mit folgenden Inhalt erstellen:
Code:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Parameter für Rotation -->
    <rotate android:fromDegrees="0"
    android:toDegrees="1080"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="2000"
    android:repeatMode="restart"
    android:repeatCount="0"
    android:interpolator="@android:anim/linear_interpolator"/>
</set>
Der ungewöhnliche Parameter 'android:toDegrees="1080" bewirkt, dass die Bitmap 3x gedreht wird (360° x 3). Das ermöglicht einen kontinuierlichen Bewegungsablauf.

Schritt 2:
In der Layout-Datei (bei mir 'activity_main.xml') wird die ImageView und der Steuer-Button hinzugefügt:
Code:
<!-- rotierende Spirale -->
    <ImageView
        android:id="@+id/spirale"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:visibility="invisible"
        android:src="@mipmap/spirale"/>

    <!-- Steuerung zum Einschalten der rotierenden Spirale-->
    <Button
        android:id="@+id/start_rotation"
        android:onClick="startRotation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Start Rotation"
        />
Die ImageView ist standardmäßig nicht sichtbar.
Der Button spricht eine Java-Methode 'startRotation' an.

Schritt 3:
Vervollständigen der Start-Activity. Die Schnittstelle 'Animation.AnimationListener' wird implementiert, die notwendigen Callbacks und die Methode zum starten der Animation werden erstellt.
Code:
public class MainActivity extends Activity implements Animation.AnimationListener {
    private ImageView iv;
    private Animation anim;

    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // Wenn der Button getippt wird, wird hier die ImageView (Bitmap) sichtbar
    // gemacht, die Animation erstellt und ein Listener angebunden.
    // Dann wird die Animation gestartet.
    protected void startRotation(View v) {
        iv = (ImageView) this.findViewById(R.id.spirale);     //Instanz der Bitmap
        iv.setVisibility(View.VISIBLE);     //sichtbar machen
        anim = AnimationUtils.loadAnimation(this, R.anim.rotate);     //Animation erstellen
        anim.setAnimationListener(this);     //Listener
        iv.startAnimation(anim);     //Starte Animation
    }

    // Von den 3 folgenden notwendigen Callback des Listener wird in diesem
    // Fall nur das Ende der Animation benötigt, um die ImageView wieder
    // unsichtbar zu machen.
    @Override
    public void onAnimationStart(Animation animation) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onAnimationRepeat(Animation animation) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onAnimationEnd(Animation animation) {
        // ImageView wird unsichtbar
        iv.setVisibility(View.INVISIBLE);
    }
}
 
  • Danke
Reaktionen: 123thomas, swa00 und lordzwieback
Danke für die Mühe und deinen Code. :)
 
@lordzwieback
Danke, gern gemacht!
 
Zurück
Oben Unten