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 . 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 :
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:
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~