Android高级进阶 - 动画之逐帧动画(Frame Animation)
2018-01-12 12:35
555 查看
前言
Android 3.0 之前,有两种类型:逐帧动画和补间动画;Android 3.0 发布时,Android SDK 又提供了更加简单的属性动画;
Android 4.4 发布时,Android SDK 又提供了 android.transition 框架,更直观实现动画。
一、逐帧动画
也叫 Drawable Animation。有两种方式可以定义 XML 资源文件和代码实现。二、XML 资源文件方式
// 根标签为animation-list // 属性 oneshot true - 展示一遍,false - 循环播放动画 // item标签对动画中的每一个图片进行声明 // android:duration 图片展示时长案例:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/wifi_01" android:duration="200"/> <item android:drawable="@drawable/wifi_02" android:duration="200"/> <item android:drawable="@drawable/wifi_03" android:duration="200"/> <item android:drawable="@drawable/wifi_04" android:duration="200"/> <item android:drawable="@drawable/wifi_05" android:duration="200"/> <item android:drawable="@drawable/wifi_06" android:duration="200"/> </animation-list>代码应用:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="setStart" android:text="开始" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:onClick="setEnd" android:text="结束" /> <ImageView android:id="@+id/iv_anim" android:layout_width="100dp" android:layout_height="100dp" android:padding="5dp" android:src="@drawable/anim_fram" /> </LinearLayout>
private ImageView imageView; private AnimationDrawable animDrawable; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_yao); imageView = (ImageView) findViewById(R.id.iv_anim); animDrawable = (AnimationDrawable) imageView.getDrawable(); } public void setStart(View view) { animDrawable.start(); } public void setEnd(View view) { animDrawable.stop(); }
三、代码实现
private ImageView imageView; private AnimationDrawable mAnimDrawable; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_yao); imageView = (ImageView) findViewById(R.id.iv_anim); initDrawable(); } private void initDrawable() { mAnimDrawable = new AnimationDrawable(); for (int i = 1; i <= 6; i++) { int id = getResources().getIdentifier("wifi_0" + i, "drawable", getPackageName()); Drawable drawable = getResources().getDrawable(id); // 添加一帧,并设置该帧显示的持续时间 mAnimDrawable.addFrame(drawable, 200); } mAnimDrawable.setOneShot(false); imageView.setImageDrawable(mAnimDrawable); } public void setStart(View view) { AnimationDrawable animDrawable = (AnimationDrawable) imageView.getDrawable(); animDrawable.start(); } public void setEnd(View view) { AnimationDrawable animDrawable = (AnimationDrawable) imageView.getDrawable(); animDrawable.stop(); }
相关文章推荐
- Android动画之逐帧动画(Frame Animation)实例详解
- Android动画之逐帧动画(Frame Animation)实例详解
- Android 高级进阶 - 动画之补间动画(Tween Animation)
- Android动画——逐帧动画(Frame Animation)
- Android动画之逐帧动画(Frame Animation)基础学习
- Android动画之逐帧动画(Frame Animation)实例详解
- Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)
- Android动画之逐帧动画(Frame Animation)实例详解
- Android 动画解析(一) 逐帧动画(Frame Animation)
- Android 高级进阶 - 动画之属性动画(Property Animation)
- 高级Android开发工程师进阶路线
- Android动画-Frame Animation(帧动画)
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- Android中的动画详解系列【1】——逐帧动画
- Android 动画专题--- Frame Animation
- 详解Android动画之Frame Animation
- 动画五、ValueAnimator属性动画高级进阶(二)
- Android动画之逐帧动画
- Android动画效果之Frame Animation(逐帧动画)
- Android仿微信打开红包动画(逐帧动画)