Rahmenanimation der Android-Animationssammlung

Einführung in diesen Abschnitt:

Beginnen wir mit diesem Abschnitt und erkunden wir die Animationen in Android. Schließlich wird das Hinzufügen einiger Animationen zur APP unsere Anwendung noch beeindruckender machen, z. B. die einfachste Möglichkeit, die Aktivität ein- und auszuschalten. Natürlich sind benutzerdefinierte Steuerungsanimationen auf jeden Fall unerlässlich ~ Die Animation in Android ist in drei Kategorien unterteilt: Frame-by-Frame-Animation (Frame) und Tween-Animation (Tween) sowie Eigenschaftsanimation  (Property) , die nach Android 3.0 eingeführt wurde . In diesem Abschnitt finden Sie die erste Kategorie. Animation - eine grundlegende Verwendung der Frame-by-Frame-Animation~ 


1. Konzept und Verwendung der Frame-Animation

Die Rahmenanimation ist sehr einfach zu verstehen. Tatsächlich wird sie einfach aus N statischen Bildern zusammengestellt, und dann zeigen wir diese Bilder nacheinander durch Steuerung an. Aufgrund des „visuellen Rests“ des menschlichen Auges wird dies zu einer „Illusion“ führen " der Animation, und spielen Sie den Film ab. Das Prinzip ist das gleiche!

Um eine Frame-Animation in Android zu implementieren, verwenden wir im Allgemeinen ein zuvor erläutertes Drawable: AnimationDrawable  schreibt zuerst das Drawable und ruft dann start() und stop() im Code auf, um die Wiedergabe der Animation zu starten oder zu stoppen

Natürlich können wir auch Frame-für-Frame-Animationen in Java-Code erstellen, AnimationDrawable-Objekte erstellen und dann addFrame (Drawable Frame, Int Duration) aufrufen, um Frames zur Animation hinzuzufügen, und dann start () und stop () ~ aufrufen

Schreiben wir zwei Beispiele, um die Wirkung der nächsten Frame-Animation zu erleben und uns mit der Verwendung vertraut zu machen


2. Anwendungsbeispiel:

Beispiel 1: Das einfachste Beispiel :

Laufeffektdiagramm :

Code-Implementierung :

Schreiben Sie zuerst unsere Animationsdatei, ganz einfach, erstellen Sie zuerst ein Animationsverzeichnis unter res und starten Sie dann unsere Animationsdatei: miao_gif.xml : Hier wird mit android:oneshot festgelegt, ob die Animation nur einmal abgespielt wird, true nur einmal abgespielt wird, false Schleife !

<?xml version="1.0"kodierung="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <Artikel
        android:drawable="@mipmap/img_miao1"
        android:duration="80" />
    <Artikel
        android:drawable="@mipmap/img_miao2"
        android:duration="80" />
    <Artikel
        android:drawable="@mipmap/img_miao3"
        android:duration="80" />
    <!--Auf Platz beschränkt, andere Elemente weglassen, selbst erfinden-->
    ...
</animation-list>

Gehen Sie mit der Animationsdatei zu unserer Layoutdatei: activity_main.xml :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Schaltfläche
        android:id="@+id/btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="start" />

    <Schaltfläche
        android:id="@+id/btn_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="stop" />

    <ImageView
        android:id="@+id/img_show"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_gravity="center"
        android:background="@anim/miao_gif" />
    
</LinearLayout>

Schließlich steuert unsere MainActivity.java hier den Start und die Pause der Animation:

Die öffentliche Klasse MainActivity erweitert AppCompatActivity und implementiert View.OnClickListener {

    privater Button btn_start;
    privater Button btn_stop;
    private ImageView img_show;
    private AnimationZeichnbare Animation;

    @Override
    protected void onCreate(Bundle savingInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bindViews();
        anim = (AnimationDrawable) img_show.getBackground();
    }

    private void bindViews() {
        btn_start = (Button) findViewById(R.id.btn_start);
        btn_stop = (Button) findViewById(R.id.btn_stop);
        img_show = (ImageView) findViewById(R.id.img_show);
        btn_start.setOnClickListener(this);
        btn_stop.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            Fall R.id.btn_start:
                anim.start();
                brechen;
            Fall R.id.btn_stop:
                anim.stop();
                brechen;
        }
    }
}

OK, es ist ganz einfach~


Beispiel 2: Frame-Animation an einer bestimmten Stelle abspielen

Laufeffektdiagramm :

Code-Implementierung :

Laden Sie dennoch zuerst unsere Animationsdatei hoch: anim_zhuan.xml :

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <Artikel
        android:drawable="@mipmap/img_zhuan1"
        android:duration="80" />
    <Artikel
        android:drawable="@mipmap/img_zhuan2"
        android:duration="80" />
    <Artikel
        android:drawable="@mipmap/img_zhuan3"
        android:duration="80" />
     <!--Auf Platz beschränkt, andere Elemente weglassen, selbst erfinden-->
    ...
</animation-list>

Als nächstes schreiben wir eine benutzerdefinierte ImageView: FrameView.java , in der der aktuell abgespielte Frame durch Reflektion ermittelt wird und ob es sich um den letzten Frame handelt. Wenn ja, blenden Sie das Steuerelement aus!

/**
 * Erstellt von Jay am 15.11.2015 0015.
 */
Die öffentliche Klasse FrameView erweitert ImageView {

    private AnimationZeichnbare Animation;

    public FrameView(Context context) {
        super(Kontext);
    }

    public FrameView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public FrameView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setAnim(AnimationDrawable anim){
        this.anim = anim;
    }

    public void setLocation(int top,int left){
        this.setFrame(left,top,left + 200,top + 200);
    }

    @Override
    protected void onDraw(Canvas Canvas) {
        versuchen{
            // Reflection ruft den mCurFrame-Wert in AnimationDrawable auf
            Feld field = AnimationDrawable.class
                    .getDeclaredField("mCurFrame");
            field.setAccessible(true);
            int curFrame = field.getInt(anim);// Holen Sie sich den aktuellen Frame der Animationsanimation
            if (curFrame == anim.getNumberOfFrames() - 1)// Wenn es den letzten Frame erreicht hat
            {
                //Die Ansicht ausblenden lassen
                setVisibility(View.INVISIBLE);
            }
        }catch (Ausnahme e){e.printStackTrace();}
        super.onDraw(canvas);
    }
}

Schließlich erstellt unsere MainActivity.java ein FrameLayout, fügt eine Ansicht hinzu, verarbeitet das im Touch-Ereignis gedrückte Ereignis, zeigt das Steuerelement an und startet die Animation~

Die öffentliche Klasse MainActivity erweitert AppCompatActivity {

    private FrameView fView;
    private AnimationDrawable anim = null;

    @Override
    protected void onCreate(Bundle savingInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout fly = new FrameLayout(this);
        setContentView(fly);
        fView = new FrameView(this);
        fView.setBackgroundResource(R.anim.anim_zhuan);
        fView.setVisibility(View.INVISIBLE);
        anim = (AnimationDrawable) fView.getBackground();
        fView.setAnim(anim);
        fly.addView(fView);
        fly.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // Legt den Animationseffekt beim Drücken fest
                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    anim.stop();
                    float x = event.getX();
                    float y = event.getY();
                    fView.setLocation((int) y - 40,(int)x-20); //Anzeigeposition anzeigen
                    fView.setVisibility(View.VISIBLE);
                    anim.start(); //Starte die Animation
                }
                falsch zurückgeben;
            }
        });
    }
}

Supongo que te gusta

Origin blog.csdn.net/leyang0910/article/details/131838921
Recomendado
Clasificación