Android三种常用动画分享(1)--帧动画
2016-03-11 11:58
495 查看
在Android3.0(即API
Level11)以前,Android仅支持2种动画:分别是Frame Animation(逐帧动画)和Tween Animation(补间动画),在3.0之后Android支持了一种新的动画系统,称为:Property
Animation(属性动画)。
本编主要写的是第一种Frame Animation(逐帧动画)
这个很好理解,一帧帧的播放图片,利用人眼视觉残留原理,给我们带来动画的感觉。它的原理的GIF图片、电影播放原理一样。
在Android中提供了两种方式为AnimationDrawable添加帧:XML定义的资源文件和Java代码创建,后面再详细讲讲这两种添加帧的方式。
第一种在代码中设置帧动画
先介绍下代码中AnimationDrawable的常用方法
void start():开始播放逐帧动画。
void stop():停止播放逐帧动画。
void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间。
int getDuration(int i):得到指定index的帧的持续时间。
Drawable getFrame(int index):得到指定index的帧Drawable。
int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量。
boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放。
boolean isRunning():当前AnimationDrawable是否正在播放。
void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放
通过在java代码中创建AnimationDrawable对象,然后通过addFrame(Drawable frame, int duration)方法向动画添加帧,然后start()。。。
第二种在XML中设置帧动画
定义在XML文件中,我们可以放置在/res下的anim目录中(/res/anim/frame_animation.xml),文件名可以作为资源ID在代码中引用
例如:
下面看下代码:
MainActivity
XML设置帧动画的代码frame_animation.xml上边已经贴出来了
布局文件activity_main.XML
源码地址:http://download.csdn.net/detail/linder_qzy/9458517
Level11)以前,Android仅支持2种动画:分别是Frame Animation(逐帧动画)和Tween Animation(补间动画),在3.0之后Android支持了一种新的动画系统,称为:Property
Animation(属性动画)。
本编主要写的是第一种Frame Animation(逐帧动画)
这个很好理解,一帧帧的播放图片,利用人眼视觉残留原理,给我们带来动画的感觉。它的原理的GIF图片、电影播放原理一样。
在Android中提供了两种方式为AnimationDrawable添加帧:XML定义的资源文件和Java代码创建,后面再详细讲讲这两种添加帧的方式。
第一种在代码中设置帧动画
先介绍下代码中AnimationDrawable的常用方法
void start():开始播放逐帧动画。
void stop():停止播放逐帧动画。
void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间。
int getDuration(int i):得到指定index的帧的持续时间。
Drawable getFrame(int index):得到指定index的帧Drawable。
int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量。
boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放。
boolean isRunning():当前AnimationDrawable是否正在播放。
void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放
通过在java代码中创建AnimationDrawable对象,然后通过addFrame(Drawable frame, int duration)方法向动画添加帧,然后start()。。。
第二种在XML中设置帧动画
定义在XML文件中,我们可以放置在/res下的anim目录中(/res/anim/frame_animation.xml),文件名可以作为资源ID在代码中引用
例如:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" ><!-- 设置是否只执行一次 --> <!-- 设置图片资源以及每一帧执行时间 --> <item android:drawable="@drawable/frame1" android:duration="300"/> <item android:drawable="@drawable/frame2" android:duration="300"/> <item android:drawable="@drawable/frame3" android:duration="300"/> <item android:drawable="@drawable/frame4" android:duration="300"/> <item android:drawable="@drawable/frame5" android:duration="300"/> <item android:drawable="@drawable/frame6" android:duration="300"/> <item android:drawable="@drawable/frame7" android:duration="300"/> <item android:drawable="@drawable/frame8" android:duration="300"/> </animation-list>
下面看下代码:
MainActivity
import android.app.Activity; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends Activity { private Button btn_start, btn_stop; private ImageView iv_frame; private AnimationDrawable anim; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_start = (Button) findViewById(R.id.btn_start); btn_stop = (Button) findViewById(R.id.btn_stop); iv_frame = (ImageView) findViewById(R.id.iv); setListener(); initAnimationByXML();//通过XML来设置帧动画 //initAnimationByCode();//代码方式设置帧动画 } /** * 通过XML来设置帧动画 */ private void initAnimationByXML() { iv_frame.setBackgroundResource(R.anim.frame_animation); anim = (AnimationDrawable) iv_frame.getBackground(); } /** * 代码方式设置帧动画 */ private void initAnimationByCode() { anim = new AnimationDrawable(); anim.addFrame(getResources().getDrawable(R.drawable.frame1), 300); anim.addFrame(getResources().getDrawable(R.drawable.frame2), 300); anim.addFrame(getResources().getDrawable(R.drawable.frame3), 300); anim.addFrame(getResources().getDrawable(R.drawable.frame4), 300); anim.addFrame(getResources().getDrawable(R.drawable.frame5), 300); anim.addFrame(getResources().getDrawable(R.drawable.frame6), 300); anim.addFrame(getResources().getDrawable(R.drawable.frame7), 300); anim.addFrame(getResources().getDrawable(R.drawable.frame8), 300); anim.setOneShot(false); iv_frame.setBackgroundDrawable(anim); //将动画设置为ImageView背景 } private void setListener() { btn_start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { anim.start();//开始动画 } }); btn_stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { anim.stop();//结束动画 } }); } }
XML设置帧动画的代码frame_animation.xml上边已经贴出来了
布局文件activity_main.XML
<LinearLayout 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" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/btn_start" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="start" /> <Button android:id="@+id/btn_stop" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="stop" /> </LinearLayout> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
源码地址:http://download.csdn.net/detail/linder_qzy/9458517
相关文章推荐
- Android Studio中新建项目提示classes couldn't be instantiated解决方法
- android 测试
- IPC机制---04 Android中的IPC通讯方式(D)
- 设计模式_策略模式
- Android之MVC设计模式
- Android Color Generator
- 史上最详细的Android Studio系列教程(转载)
- Android 使用SVN
- Android 弹无虚发之第四弹:你应该掌握的Notification(Notification的通知栏常驻、Notification的各种样式、Notification点击无效)
- Android Library项目导出aar
- Makefile 中:= ?= += =的区别
- 适配 Android N 需要注意什么
- Android listview设置多个不同的item样式
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- Android利用广播监听设备安装和卸载应用程序
- ViewConfiguration 介绍
- androidUSB通信——打印机
- androidUSB通信——打印机
- Android性能调优具体技巧 20+条(干货不止一点点)
- Android开发之px、dp、dip、sp