Animasi bingkai koleksi animasi Android


Pengenalan kepada bahagian ini:

Bermula dari bahagian ini kami akan meneroka animasi dalam Android Lagipun, menambah beberapa animasi pada APP akan menjadikan aplikasi kami menjadi Ia sangat keren Contohnya, cara paling mudah ialah menghidupkan dan mematikan Aktiviti Sudah tentu, animasi kawalan tersuai pastinya penting~ Dan animasi dalam Android Terbahagi kepada tiga kategori utama, Animasi bingkai demi bingkai (Bingkai) dan Animasi Tween (Tween), serta Animasi atribut diperkenalkan selepas Android 3.0 (Hartanah), dan perkara yang dibawa oleh bahagian ini kepada anda ialah jenis animasi pertama-penggunaan asas animasi bingkai demi bingkai~1.gif


1 . Konsep animasi Bingkai Dan penggunaan

animasi bingkai adalah sangat mudah untuk difahami, ia hanyalah koleksi N gambar statik, dan kemudian kami memaparkannya dalam urutan melalui kawalan Gambar-gambar ini, disebabkan oleh "sisa visual" mata manusia, akan memberikan kita "ilusi" animasi, sama seperti prinsip menayangkan filem!

Untuk melaksanakan animasi bingkai dalam Android, secara amnya kami akan menggunakan Drawable yang dijelaskan sebelum ini: AnimationDrawableMula-mula tulis Drawable, dan kemudian panggil start() dan stop() dalam kod untuk memulakan atau Berhenti bermain animasi~

Sudah tentu kita juga boleh mencipta animasi bingkai demi bingkai dalam kod Java, mencipta objek AnimationDrawable, dan kemudian memanggil addFrame(Bingkai boleh lukis, tempoh int) menambah bingkai pada animasi, dan kemudian memanggil start() dan stop()~

Mari tulis dua contoh untuk mengalami kesan animasi bingkai dan membiasakan diri dengan penggunaannya


2. Contoh penggunaan:

Contoh 1: Contoh paling mudah:

Rendering berjalan :

2.gif

Pelaksanaan kod:

Mula-mula tulis fail animasi kami, ia sangat mudah, mula-mula buat direktori anim di bawah res, Kemudian kami mula melancap Fail animasi: miao_gif.xml: Android:oneshot di sini adalah untuk menetapkan sama ada animasi hanya akan dimainkan sekali, benar hanya akan dimainkan sekali, palsu akan dimainkan dalam gelung!

<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@mipmap/img_miao1"
        android:duration="80" />
    <item
        android:drawable="@mipmap/img_miao2"
        android:duration="80" />
    <item
        android:drawable="@mipmap/img_miao3"
        android:duration="80" />
    <!--限于篇幅,省略其他item,自己补上-->
    ...</animation-list>

Fail animasi ada di sana, kemudian pergi ke fail susun atur kami: 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">

    <Button
        android:id="@+id/btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始" />

    <Button
        android:id="@+id/btn_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止" />

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

Akhir sekali, MainActivity.java kami, Kawal permulaan dan jeda animasi di sini:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_start;
    private Button btn_stop;
    private ImageView img_show;
    private AnimationDrawable anim;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        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()) {
            case R.id.btn_start:
                anim.start();
                break;
            case R.id.btn_stop:
                anim.stop();
                break;
        }
    }
}

Baiklah, sangat mudah~


Contoh 2: Mainkan animasi bingkai di tempat yang ditentukan

Menjalankan pemaparan:

3.gif

Pelaksanaan kod:

Masih muat naik fail animasi kami dahulu:anim_zhuan.xml

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item
        android:drawable="@mipmap/img_zhuan1"
        android:duration="80" />
    <item
        android:drawable="@mipmap/img_zhuan2"
        android:duration="80" />
    <item
        android:drawable="@mipmap/img_zhuan3"
        android:duration="80" />
     <!--限于篇幅,省略其他item,自己补上-->
    ...</animation-list>

Kemudian kami menulis ImageView tersuai: FrameView.java, di mana bingkai yang sedang dimainkan diperoleh melalui pantulan. Kemudian sama ada ia adalah bingkai terakhir, jika ya, sembunyikan kawalan!

/**
 * Created by Jay on 2015/11/15 0015.
 */
public class FrameView extends ImageView {

    private AnimationDrawable anim;

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

    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) {
        try{
            //反射调用AnimationDrawable里的mCurFrame值
            Field field = AnimationDrawable.class
                    .getDeclaredField("mCurFrame");
            field.setAccessible(true);
            int curFrame = field.getInt(anim);// 获取anim动画的当前帧
            if (curFrame == anim.getNumberOfFrames() - 1)// 如果已经到了最后一帧
            {
                //让该View隐藏
                setVisibility(View.INVISIBLE);
            }
        }catch (Exception e){e.printStackTrace();}
        super.onDraw(canvas);
    }
}

Akhir sekali ialah MainActivity.java kami, buat FrameLayout, tambah View dan tekan Kendalikan acara, kawalan paparan dan mulakan animasi~

public class MainActivity extends AppCompatActivity {

    private FrameView fView;
    private AnimationDrawable anim = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        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) {
                //设置按下时才产生动画效果
                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    anim.stop();
                    float x = event.getX();
                    float y = event.getY();
                    fView.setLocation((int) y - 40,(int)x-20);  //View显示的位置
                    fView.setVisibility(View.VISIBLE);
                    anim.start();    //开启动画
                }
                return false;
            }
        });
    }
}

Baiklah, ia juga sangat mudah~


3 Muat turun kod sampel dan alat pengekstrakan bingkai Gif untuk bahagian ini

AnimationDemo1.zip

AnimationDemo2.zip

Alat pengekstrakan bingkai GIF


Ringkasan bahagian ini:

Baiklah, ini Dalam bahagian ini, saya akan memperkenalkan kepada anda animasi bingkai paling mudah di antara tiga animasi dalam Android Ia tidak banyak digunakan dalam pembangunan sebenar. Tetapi jika anda mempelajari lebih lanjut, anda akan mempunyai lebih banyak idea pada masa hadapan~ Okay, itu sahaja untuk bahagian ini, terima kasih~