public class
AnimationDrawable
extends DrawableContainer
implements Animatable Runnable
java.lang.Object
↳ android.graphics.drawable.Drawable
↳ android.graphics.drawable.DrawableContainer
↳ android.graphics.drawable.AnimationDrawable
帧动画就像动画片一样,一张张图片有序排列,并通过一定的速度播放出来,由于人眼的视觉暂留效应,就会呈现出连贯的画面感。电影院里看的电影实际上就是高速播放的连续性图片,现在电影放映的标准是每秒24帧,即每秒播放24张图片。若要使用Frame Animation动画则必须以后AnimationDrawable类,根据API文档可以看出,此类并不在Animation类下。下面就要研究一下其主要属性:

API中给我们演示了如何配置一个帧动画文件,如下:

<!-- Animation frames are wheel0.png -- wheel5.png files inside theres/drawable/ folder --><animation-list android:id="@+id/selected" android:oneshot="false"><item android:drawable="@drawable/wheel0" android:duration="50" /><item android:drawable="@drawable/wheel1" android:duration="50" /><item android:drawable="@drawable/wheel2" android:duration="50" /><item android:drawable="@drawable/wheel3" android:duration="50" /></animation-list>

文件用一个animation-list的标签包裹,一个oneshot属性(设置成false表示重复播放),数个item标签,一个item标签表示一张帧图,其中包含了drawable属性,表示帧图资源的位置,duration属性表示一帧的持续时间,单位是毫秒。若每一帧是50毫秒,则一秒钟播放20帧图像。下面我们运用帧动画实现模仿美团进行网络加载时的提示框。
1.主布局文件(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<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"><Button
        android:id="@+id/btn_test"android:onClick="test"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="模拟请求" />
</RelativeLayout>

2.帧动画文件(frame_animation.xml)

<?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/img1"android:duration="150" /><item
        android:drawable="@drawable/img2"android:duration="150" />
</animation-list>

两个图片轮番播放,构造出动画的效果。
3.这里用到了自定义View,将提示框继承了ProgressDialog,因此要自定义一个布局文件(dialog.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"><ImageView
        android:id="@+id/loadingIv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@anim/frame_animation"/><TextView
        android:id="@+id/loadingTv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/loadingIv"android:layout_centerHorizontal="true"android:textSize="20sp"android:text="正在加载中.." />
</RelativeLayout>

4.简单自定义View控件,继承自ProgressDialog(MyProgressDialog.java)

package demo.androidwar.com.myapplication;import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;/*** Created by Administrator on 2016/4/29.*/
class MyProgressDialog extends ProgressDialog {private AnimationDrawable mAnimation;private Context mContext;private ImageView mImageView;private String mLoadingTip;private TextView mLoadingTv;private int mResid;public MyProgressDialog(Context context, String content, int id) {super(context);this.mContext = context;this.mLoadingTip = content;this.mResid = id;setCanceledOnTouchOutside(true);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initView();initData();}private void initData() {mImageView.setBackgroundResource(mResid);// 通过ImageView对象拿到背景显示的AnimationDrawablemAnimation = (AnimationDrawable) mImageView.getBackground();mImageView.post(new Runnable() {@Overridepublic void run() {mAnimation.start();//调用AnimationDrawable的start方法开始动画}});mLoadingTv.setText(mLoadingTip);}private void initView() {setContentView(R.layout.dialog);// 显示界面mLoadingTv = (TextView) findViewById(R.id.loadingTv);mImageView = (ImageView) findViewById(R.id.loadingIv);}
}

将帧动画布局文件设置成ImageView的背景,又通过ImageView的getBackground方法获取了AnimationDrawable对象。新开一个线程调用AnimationDrawable的start方法启动帧动画。
5.Activity程序(MainActivity.java)

package demo.androidwar.com.myapplication;import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;public class MainActivity extends AppCompatActivity {MyProgressDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void  test(View v){dialog =new MyProgressDialog(this, "正在加载中",R.anim.frame_animation);dialog.show();Handler handler =new Handler();handler.postDelayed(new Runnable() {//此方法常用于延迟操作@Overridepublic void run() {dialog.dismiss();}}, 3000);//3秒钟后调用dismiss方法隐藏;}
}

首先实例化ProgressDialogDemo,通过构造方法传入上下文对象、提醒文字和帧动画布局文件,调用其show方法显示提示框,然后又使用了Handler的postDelayed方法,延迟3秒后调用ProgressDialogDemo的dismiss方法关闭提示框。
6.运行实例:

**喜欢的朋友请关注我,另欢迎阅读我的电子书
百度阅读:
http://yuedu.baidu.com/ebook/284b41a1e518964bce847c90?pn=1&click_type=10010002&rf=http%3A%2F%2Fblog.csdn.net%2Fyayun0516%2Farticle%2Fdetails%2F51277821
亚马逊:
http://www.amazon.cn/Android-%E7%99%BE%E6%88%98%E7%BB%8F%E5%85%B8-%E5%8D%B7I-%E5%BC%A0%E4%BA%9A%E8%BF%90/dp/B01ER5R9U2?ie=UTF8&keywords=Android%E7%BB%8F%E5%85%B8&qid=1461806976&ref_=sr_1_6&s=digital-text&sr=1-6**

【Android动画九章】-帧动画相关推荐

  1. android scaleanimation动画,【Android动画九章】-RotateAnimation(旋转动画)和ScaleAnimation(尺寸动画)...

    [Android动画九章]-RotateAnimation(旋转动画)和ScaleAnimation(尺寸动画) public abstract class Animation extends Obj ...

  2. Android自定义控件:动画类---逐帧动画AnimationDrawable

    1:概述 Android动画包括View Animation(视图动画)和Property Animator(属性动画),而View Animation包括Tween Animation(补间动画)和 ...

  3. android仿微信红包动画,Android仿微信打开红包动画(逐帧动画)

    Frame Animation(逐帧动画): 逐帧动画(Frame-by-frame Animations)从字面上理解就是一帧挨着一帧的播放图片,就像放电影一样.和补间动画一样可以通过xml实现也可 ...

  4. Android App开发动画特效中帧动画和电影淡入淡出动画的讲解及实战(附源码和演示视频 简单易懂)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.帧动画 Android的动画分为三类,帧动画,补间动画和属性动画.其中帧动画是实现原理最简单的一种,跟现实生活中的电影胶卷类似,都是在短时间内连续 ...

  5. android 同根动画_Android(java)学习笔记141:Android下的逐帧动画(Drawable Animation)...

    1. 帧动画: 帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一 ...

  6. Android动画之逐帧动画FrameAnimation

    动画入门和进阶文章列表: Animation动画概述和执行原理 Android动画之补间动画TweenAnimation Android动画之逐帧动画FrameAnimation Android动画之 ...

  7. Android动画学习之帧动画

    帧动画简介 介绍帧动画之前先了解一下'帧'的概念:帧,影像动画中最小单位,也就是最小的单幅画面.相当于电影脚上的每一格镜头.一帧就是最小的一张单幅画面,多个帧连接在一起就会形成动画.通常所说的帧数,是 ...

  8. Android动画攻略—帧动画、补间动画、属性动画

    前言 动画时Android开发中使用频率比较高的功能. 对Android提供的补间动画,帧动画以及属性动画做出归纳总结. 目录 1. 帧动画 帧动画总体实现比较简单,其实现本身是实现一个图片集的连续播 ...

  9. 安卓动画全解:补间动画(视图动画)、布局动画、属性动画、逐帧动画。动画Animation属性、Alpha属性、Scale属性、Translate属性、Rotate属性,动画集AnimationSet

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓动画全解:补间动画(视图动画).布局动画.属性动画.逐帧动画. 主要内容包含:动画Animation属性.Alpha属性.Scale属性.Tran ...

  10. iOS动画:UIImageView帧动画(完结)

    这是iOS动画的最后一章,比较简单,我们来创建一只企鹅移动的动画 1.设置帧动画 var walkFrames = [UIImage(named: "walk01.png")!,U ...

最新文章

  1. 【转】后勤自动过帐(OBYC)详细配置说明
  2. Tomcat SSL/HTTPS 单向认证
  3. 最全Pycharm教程
  4. Django中的Form ModelForm
  5. 《ANSYS 14热力学/电磁学/耦合场分析自学手册》——2.8 工具条
  6. maya2015 改变界面语言
  7. linux ftp服务器已拒绝访问,linux ftp服务器已拒绝
  8. c语言程序可以从任何函数开始执行,C语言-基本选择题及参考答案
  9. MySQL 添加列 修改列 删除列
  10. select设置高度的兼容问题
  11. 常微分方程的数值解法
  12. 使用VUE分分钟写一个验证码输入组件
  13. nodejs读取服务器json文件,如何使用Node.js读取JSON文件
  14. 亚马逊 站内广告数据分析
  15. Jenkins搭建Maven项目集成开发环境(源码库 Gitlab)
  16. JavaScript : 对LHS和RHS两个名词的理解
  17. 多线程模拟火车站售票并发
  18. mysql查询是否走索引_探索MySQL是否走索引(一)——范围查询一定走索引吗?
  19. 【计算机毕业设计】jsp+mysql 基于SSM的儿童疫苗接种管理系统(可改为新冠疫苗)
  20. Abbkine通用型免疫(共)沉淀试剂盒解决方案

热门文章

  1. HTML常用标签(三)
  2. 技术可行性与操作可行性的资料搜集与分析
  3. 【自学Python:Day3】放假的心该怎么冷静下来学……
  4. 基于市场情绪平稳度的股指期货日内交易策略
  5. 推荐一部烂片《东方华尔街》
  6. 萨达阿萨德发送到在线橙V
  7. Python3爬取人人网(校内网)个人照片及朋友照片,并一键下载到本地~~~附源代码...
  8. 交换机基本原理和配置
  9. abbex 区块链学院如何交易之 第十五章 应对意外
  10. 埃默里大学有计算机专业吗,埃默里大学计算机科学硕士排名第30(2020年TFE Times排名)...