今天我們就來學習逐幀動畫,廢話少說直接上效果圖如下:
?
?
幀動畫的實現方式有兩種:
一、在res/drawable文件夾下新建animation-list的XML實現幀動畫
1、首先在res/drawable文件夾下添加img00-img24共25張圖片
2、新建frame_anim.xml
?
- <?xml?version="1.0"?encoding="utf-8"?>??
- <animation-list?xmlns:android="http://schemas.android.com/apk/res/android"??
- ????android:oneshot="true"?>??
- ??
- ????<!--?animation-list?幀動畫?-->??
- ????<!--?android:oneshot的值為?false代表播放多次,true代表只播放一次?-->??
- ????<!--?duration代表每張圖片的播放時間?,定義一個持續時間為50毫秒的動畫幀?-->??
- ????<item??
- ????????android:drawable="@drawable/img00"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img01"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img02"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img03"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img04"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img05"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img06"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img07"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img08"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img09"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img10"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img11"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img12"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img13"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img14"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img15"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img16"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img17"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img18"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img19"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img20"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img21"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img22"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img23"??
- ????????android:duration="50"/>??
- ????<item??
- ????????android:drawable="@drawable/img24"??
- ????????android:duration="50"/>??
- ??
- </animation-list>??
3、在activity_main中添加控件
?
?
- <RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
- ????xmlns:tools="http://schemas.android.com/tools"??
- ????android:layout_width="match_parent"??
- ????android:layout_height="match_parent"??
- ????tools:context="com.havorld.frameanimation.MainActivity"?>??
- ??
- ????<ImageView??
- ????????android:id="@+id/imageView"??
- ????????android:layout_width="wrap_content"??
- ????????android:layout_height="wrap_content"??
- ????????android:layout_centerInParent="true"?/>??
- ????<!--?android:background="@drawable/frame_anim"?-->??
- ??
- ????<LinearLayout??
- ????????android:layout_width="match_parent"??
- ????????android:layout_height="wrap_content"??
- ????????android:layout_alignParentBottom="true"??
- ????????android:orientation="horizontal"??
- ????????android:padding="10dp"?>??
- ??
- ????????<Button??
- ????????????android:id="@+id/start"??
- ????????????android:layout_width="0dp"??
- ????????????android:layout_height="wrap_content"??
- ????????????android:layout_weight="1"??
- ????????????android:text="播放"?/>??
- ??
- ????????<Button??
- ????????????android:id="@+id/stop"??
- ????????????android:layout_width="0dp"??
- ????????????android:layout_height="wrap_content"??
- ????????????android:layout_weight="1"??
- ????????????android:text="停止"?/>??
- ????</LinearLayout>??
- ??
- </RelativeLayout>??
4、在代碼中獲取并開啟幀動畫
?
?
- public?class?MainActivity?extends?Activity?implements?OnClickListener?{??
- ??
- ????private?ImageView?imageView;??
- ????private?AnimationDrawable?animationDrawable;??
- ??
- ????@Override??
- ????protected?void?onCreate(Bundle?savedInstanceState)?{??
- ????????super.onCreate(savedInstanceState);??
- ????????setContentView(R.layout.activity_main);??
- ??
- ????????imageView?=?(ImageView)?findViewById(R.id.imageView);??
- ????????findViewById(R.id.start).setOnClickListener(this);??
- ????????findViewById(R.id.stop).setOnClickListener(this);??
- ??
- ????????setXml2FrameAnim1();??
- ????????//?setXml2FrameAnim2();??
- ??
- ????}??
- ??
- ????/**?
- ?????*?通過XML添加幀動畫方法一?
- ?????*/??
- ????private?void?setXml2FrameAnim1()?{??
- ??
- ????????//?把動畫資源設置為imageView的背景,也可直接在XML里面設置??
- ????????imageView.setBackgroundResource(R.drawable.frame_anim);??
- ????????animationDrawable?=?(AnimationDrawable)?imageView.getBackground();??
- ????}??
- ??
- ????/**?
- ?????*?通過XML添加幀動畫方法二?
- ?????*/??
- ????private?void?setXml2FrameAnim2()?{??
- ??
- ????????//?通過逐幀動畫的資源文件獲得AnimationDrawable示例??
- ????????animationDrawable?=?(AnimationDrawable)?getResources().getDrawable(??
- ????????????????R.drawable.frame_anim);??
- ????????imageView.setBackground(animationDrawable);??
- ????}??
- ???
- ????@Override??
- ????public?void?onClick(View?v)?{??
- ??
- ????????switch?(v.getId())?{??
- ????????case?R.id.start:??
- ????????????if?(animationDrawable?!=?null?&&?!animationDrawable.isRunning())?{??
- ????????????????animationDrawable.start();??
- ????????????}??
- ????????????break;??
- ????????case?R.id.stop:??
- ????????????if?(animationDrawable?!=?null?&&?animationDrawable.isRunning())?{??
- ????????????????animationDrawable.stop();??
- ????????????}??
- ????????????break;??
- ??
- ????????default:??
- ????????????break;??
- ????????}??
- ????}??
- ??
- }??
二、通過代碼實現幀動畫
?
?
- /**?
- ?*?通過代碼添加幀動畫方法?
- ?*/??
- private?void?setSrc2FrameAnim()?{??
- ??
- ????animationDrawable?=?new?AnimationDrawable();??
- ????//?為AnimationDrawable添加動畫幀??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img00),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img01),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img02),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img03),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img04),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img05),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img06),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img07),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img08),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img09),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img10),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img11),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img12),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img13),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img14),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img15),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img16),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img17),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img18),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img19),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img20),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img21),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img22),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img23),?50);??
- ????animationDrawable.addFrame(??
- ????????????getResources().getDrawable(R.drawable.img24),?50);??
- ????//?設置為循環播放??
- ????animationDrawable.setOneShot(false);??
- ????imageView.setBackground(animationDrawable);??
- }??
?
點擊下載源碼
?