Android动画之逐帧动画(FrameAnimation)详解

今天我们就来学习逐帧动画,废话少说直接上效果图如下:

 

 

帧动画的实现方式有两种:

一、在res/drawable文件夹下新建animation-list的XML实现帧动画

1、首先在res/drawable文件夹下添加img00-img24共25张图片

2、新建frame_anim.xml

 

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:oneshot="true" >  
  4.   
  5.     <!-- animation-list 帧动画 -->  
  6.     <!-- android:oneshot的值为 false代表播放多次,true代表只播放一次 -->  
  7.     <!-- duration代表每张图片的播放时间 ,定义一个持续时间为50毫秒的动画帧 -->  
  8.     <item  
  9.         android:drawable="@drawable/img00"  
  10.         android:duration="50"/>  
  11.     <item  
  12.         android:drawable="@drawable/img01"  
  13.         android:duration="50"/>  
  14.     <item  
  15.         android:drawable="@drawable/img02"  
  16.         android:duration="50"/>  
  17.     <item  
  18.         android:drawable="@drawable/img03"  
  19.         android:duration="50"/>  
  20.     <item  
  21.         android:drawable="@drawable/img04"  
  22.         android:duration="50"/>  
  23.     <item  
  24.         android:drawable="@drawable/img05"  
  25.         android:duration="50"/>  
  26.     <item  
  27.         android:drawable="@drawable/img06"  
  28.         android:duration="50"/>  
  29.     <item  
  30.         android:drawable="@drawable/img07"  
  31.         android:duration="50"/>  
  32.     <item  
  33.         android:drawable="@drawable/img08"  
  34.         android:duration="50"/>  
  35.     <item  
  36.         android:drawable="@drawable/img09"  
  37.         android:duration="50"/>  
  38.     <item  
  39.         android:drawable="@drawable/img10"  
  40.         android:duration="50"/>  
  41.     <item  
  42.         android:drawable="@drawable/img11"  
  43.         android:duration="50"/>  
  44.     <item  
  45.         android:drawable="@drawable/img12"  
  46.         android:duration="50"/>  
  47.     <item  
  48.         android:drawable="@drawable/img13"  
  49.         android:duration="50"/>  
  50.     <item  
  51.         android:drawable="@drawable/img14"  
  52.         android:duration="50"/>  
  53.     <item  
  54.         android:drawable="@drawable/img15"  
  55.         android:duration="50"/>  
  56.     <item  
  57.         android:drawable="@drawable/img16"  
  58.         android:duration="50"/>  
  59.     <item  
  60.         android:drawable="@drawable/img17"  
  61.         android:duration="50"/>  
  62.     <item  
  63.         android:drawable="@drawable/img18"  
  64.         android:duration="50"/>  
  65.     <item  
  66.         android:drawable="@drawable/img19"  
  67.         android:duration="50"/>  
  68.     <item  
  69.         android:drawable="@drawable/img20"  
  70.         android:duration="50"/>  
  71.     <item  
  72.         android:drawable="@drawable/img21"  
  73.         android:duration="50"/>  
  74.     <item  
  75.         android:drawable="@drawable/img22"  
  76.         android:duration="50"/>  
  77.     <item  
  78.         android:drawable="@drawable/img23"  
  79.         android:duration="50"/>  
  80.     <item  
  81.         android:drawable="@drawable/img24"  
  82.         android:duration="50"/>  
  83.   
  84. </animation-list>  


3、在activity_main中添加控件

 

 

[html] view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context="com.havorld.frameanimation.MainActivity" >  
  6.   
  7.     <ImageView  
  8.         android:id="@+id/imageView"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_centerInParent="true" />  
  12.     <!-- android:background="@drawable/frame_anim" -->  
  13.   
  14.     <LinearLayout  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="wrap_content"  
  17.         android:layout_alignParentBottom="true"  
  18.         android:orientation="horizontal"  
  19.         android:padding="10dp" >  
  20.   
  21.         <Button  
  22.             android:id="@+id/start"  
  23.             android:layout_width="0dp"  
  24.             android:layout_height="wrap_content"  
  25.             android:layout_weight="1"  
  26.             android:text="播放" />  
  27.   
  28.         <Button  
  29.             android:id="@+id/stop"  
  30.             android:layout_width="0dp"  
  31.             android:layout_height="wrap_content"  
  32.             android:layout_weight="1"  
  33.             android:text="停止" />  
  34.     </LinearLayout>  
  35.   
  36. </RelativeLayout>  


4、在代码中获取并开启帧动画

 

 

[java] view plain copy
  1. public class MainActivity extends Activity implements OnClickListener {  
  2.   
  3.     private ImageView imageView;  
  4.     private AnimationDrawable animationDrawable;  
  5.   
  6.     @Override  
  7.     protected void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.activity_main);  
  10.   
  11.         imageView = (ImageView) findViewById(R.id.imageView);  
  12.         findViewById(R.id.start).setOnClickListener(this);  
  13.         findViewById(R.id.stop).setOnClickListener(this);  
  14.   
  15.         setXml2FrameAnim1();  
  16.         // setXml2FrameAnim2();  
  17.   
  18.     }  
  19.   
  20.     /** 
  21.      * 通过XML添加帧动画方法一 
  22.      */  
  23.     private void setXml2FrameAnim1() {  
  24.   
  25.         // 把动画资源设置为imageView的背景,也可直接在XML里面设置  
  26.         imageView.setBackgroundResource(R.drawable.frame_anim);  
  27.         animationDrawable = (AnimationDrawable) imageView.getBackground();  
  28.     }  
  29.   
  30.     /** 
  31.      * 通过XML添加帧动画方法二 
  32.      */  
  33.     private void setXml2FrameAnim2() {  
  34.   
  35.         // 通过逐帧动画的资源文件获得AnimationDrawable示例  
  36.         animationDrawable = (AnimationDrawable) getResources().getDrawable(  
  37.                 R.drawable.frame_anim);  
  38.         imageView.setBackground(animationDrawable);  
  39.     }  
  40.    
  41.     @Override  
  42.     public void onClick(View v) {  
  43.   
  44.         switch (v.getId()) {  
  45.         case R.id.start:  
  46.             if (animationDrawable != null && !animationDrawable.isRunning()) {  
  47.                 animationDrawable.start();  
  48.             }  
  49.             break;  
  50.         case R.id.stop:  
  51.             if (animationDrawable != null && animationDrawable.isRunning()) {  
  52.                 animationDrawable.stop();  
  53.             }  
  54.             break;  
  55.   
  56.         default:  
  57.             break;  
  58.         }  
  59.     }  
  60.   
  61. }  


二、通过代码实现帧动画

 

 

[java] view plain copy
  1. /** 
  2.  * 通过代码添加帧动画方法 
  3.  */  
  4. private void setSrc2FrameAnim() {  
  5.   
  6.     animationDrawable = new AnimationDrawable();  
  7.     // 为AnimationDrawable添加动画帧  
  8.     animationDrawable.addFrame(  
  9.             getResources().getDrawable(R.drawable.img00), 50);  
  10.     animationDrawable.addFrame(  
  11.             getResources().getDrawable(R.drawable.img01), 50);  
  12.     animationDrawable.addFrame(  
  13.             getResources().getDrawable(R.drawable.img02), 50);  
  14.     animationDrawable.addFrame(  
  15.             getResources().getDrawable(R.drawable.img03), 50);  
  16.     animationDrawable.addFrame(  
  17.             getResources().getDrawable(R.drawable.img04), 50);  
  18.     animationDrawable.addFrame(  
  19.             getResources().getDrawable(R.drawable.img05), 50);  
  20.     animationDrawable.addFrame(  
  21.             getResources().getDrawable(R.drawable.img06), 50);  
  22.     animationDrawable.addFrame(  
  23.             getResources().getDrawable(R.drawable.img07), 50);  
  24.     animationDrawable.addFrame(  
  25.             getResources().getDrawable(R.drawable.img08), 50);  
  26.     animationDrawable.addFrame(  
  27.             getResources().getDrawable(R.drawable.img09), 50);  
  28.     animationDrawable.addFrame(  
  29.             getResources().getDrawable(R.drawable.img10), 50);  
  30.     animationDrawable.addFrame(  
  31.             getResources().getDrawable(R.drawable.img11), 50);  
  32.     animationDrawable.addFrame(  
  33.             getResources().getDrawable(R.drawable.img12), 50);  
  34.     animationDrawable.addFrame(  
  35.             getResources().getDrawable(R.drawable.img13), 50);  
  36.     animationDrawable.addFrame(  
  37.             getResources().getDrawable(R.drawable.img14), 50);  
  38.     animationDrawable.addFrame(  
  39.             getResources().getDrawable(R.drawable.img15), 50);  
  40.     animationDrawable.addFrame(  
  41.             getResources().getDrawable(R.drawable.img16), 50);  
  42.     animationDrawable.addFrame(  
  43.             getResources().getDrawable(R.drawable.img17), 50);  
  44.     animationDrawable.addFrame(  
  45.             getResources().getDrawable(R.drawable.img18), 50);  
  46.     animationDrawable.addFrame(  
  47.             getResources().getDrawable(R.drawable.img19), 50);  
  48.     animationDrawable.addFrame(  
  49.             getResources().getDrawable(R.drawable.img20), 50);  
  50.     animationDrawable.addFrame(  
  51.             getResources().getDrawable(R.drawable.img21), 50);  
  52.     animationDrawable.addFrame(  
  53.             getResources().getDrawable(R.drawable.img22), 50);  
  54.     animationDrawable.addFrame(  
  55.             getResources().getDrawable(R.drawable.img23), 50);  
  56.     animationDrawable.addFrame(  
  57.             getResources().getDrawable(R.drawable.img24), 50);  
  58.     // 设置为循环播放  
  59.     animationDrawable.setOneShot(false);  
  60.     imageView.setBackground(animationDrawable);  
  61. }  

 

点击下载源码

 

转载于:https://www.cnblogs.com/Im-Victor/p/8760379.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax-简单参数方法实现阴影效果

注&#xff1a; 简单参数 &#xff08;按照参数的数量和位置传递参数&#xff09; 使用时按照位置、数量传递 shadow.js函数//简单参数实现方式/** slices:阴影* opacity:透明度* zIndex:层级* */jQuery.fn.shadow_simple function (slices,opacity,zIndex) { //获取到每个…

第一二三范式的简单理解

第一范式&#xff08;无重复的列&#xff09; 定义&#xff1a;数据库表的每一列都是不可分割的原子数据项&#xff0c;而不能是集合&#xff0c;数组&#xff0c;记录等非原子数据项。如果实体中的某个属性有多个值时&#xff0c;必须拆分为不同的属性 通俗解释&#xff1a;一…

网络爬虫--1.通用爬虫和聚焦爬虫

文章目录一.前言二.通用爬虫1.工作原理2.通用爬虫的局限性三.聚焦爬虫一.前言 根据使用场景&#xff0c;网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种。 其中通用网络爬虫是捜索引擎抓取系统&#xff08;Baidu、Google、Yahoo等&#xff09;的重要组成部分。主要目的是将互联网…

敏捷教练的工具箱

学习并不是简简单单的阅读和浏览&#xff0c;而是一个积累的过程&#xff0c;一个通过持续的学习&#xff0c;对自己的知识体系不断丰富、索引的过程。接下来我会从四个方面入手分享我的经验。 高质量的信息源和高效的学习 Google是一个很好的工具&#xff0c;通过它&#x…

log4j教程

详细的Log4j使用教程 转载 2016年08月19日 14:44:49 5072 日志是应用软件中不可缺少的部分&#xff0c;Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站&#xff1a;jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。…

BC范式介绍

设关系模式R<U&#xff0c;F>∈1NF&#xff0c;如果对于R的每个函数依赖X→Y&#xff0c;若Y不属于X&#xff0c;则X必含有候选码&#xff0c;那么R∈BCNF。 即为&#xff1a;对于关系模式R&#xff0c;若 R为第一范式&#xff0c;且每个属性都不部分依赖于候选键也不传递…

com.jhlabs:imaging:jar:01012005 所在仓库+captcha验证码maven依赖

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 <repositories> <repository> <id>atlassian</id> <name>atlassian</name&g…

python 发送邮件的两种方式【终极篇】

python 发送邮件的两种方式【终极篇】 一&#xff0c;利用python自带的库 smtplib简单高效 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header import smtplib from django.conf import settingsmail_hos…

网络爬虫--2.HTTP和HTTPS

文章目录一.简介二.HTTP的请求与响应三.客户端HTTP请求1.格式2.请求方法四.常用的请求报头1.Host (主机和端口号)2.Connection (链接类型)3.Upgrade-Insecure-Requests (升级为HTTPS请求)4. User-Agent (浏览器名称)5. Accept (传输文件类型)6.Referer (页面跳转处)7.Accept-En…

解决win7的outlook打不开的问题

outlook打不开&#xff0c;一直显示正在处理 解决方法&#xff1a; 1. 按住Ctrl,双击打开组件&#xff0c;会提示是否进入安全模式&#xff0c; 进入安全模式 2. 单击Outlook中的文件-选项-加载项- 左下角的“COM加载项“ 旁边的“转到”&#xff0c;将所有加载项前面的勾都去掉…

IBM王阳:软件是凝聚创新力的最佳平台

导读&#xff1a;在IBM全球副总裁兼IBM中国开发中心总经理王阳博士看来&#xff0c;IBM百年不衰的根本原因在于将创新力凝结成软件然后进行合适的传播&#xff0c;其间最重要的是成功打造出了一个吸引人才、培养研发人才并激发出人才创新力的环境和氛围。而保持创新领导力的关键…

数据库的规范化

在关系数据库中&#xff0c;对关系模式的基本要求是满足第一范式。 规范化程度过低的关系不一定能够很好地描述现实世界 可能存在插入异常、删除异常、修改复杂、数据冗余等问题 解决方法就是对其进行规范化&#xff0c;转换成高级范式 一个低一级范式的关系模式&#xff0c;通…

Jquery 多行拖拽图片排序 jq优化

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>jQuery图片拖动排序代码</title><style type"text/css">.item_container{position:relative;height:auto;overflow:hidden;} .item_content ul{li…

应该把script标签放在哪里

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 概述&#xff1a; 如果在页面中写JS的话&#xff0c;那必然会用到script标签&#xff0c;理论上script标签放在哪里都是可以的&#xff…

网络爬虫--3.str和bytes的区别

文章目录一.bytes二.str和bytes相互转换三.bytearray一.bytes bytes对象只负责以二进制字节序列的形式记录所需记录的对象&#xff0c;至于该对象到底表示什么&#xff08;比如到底是什么字符&#xff09;则由相应的编码格式解码所决定。 bytes是Python 3中特有的&#xff0c…

git使用问题

1、错误&#xff1a;The following untracked working tree files would be overwritten by checkout 。后面跟了几个文件 场景&#xff1a;需要从一个分支切换到另一个分支时报错 方法&#xff1a;git clean -d -fx "" 原因&#xff1a;之前修改了.gitignore文件&am…

jdbc写入和读取过程

[jdbc写操作] Class.forName("com.mysql.jdbc.Driver"); Connection conn DriverManager.getConnection("jdbc:mysql://localhost:3306/big","root","root"); ppst conn.preparedStatement("insert into test(id,name,age) val…

分享11款主流的开源编程工具

导读&#xff1a;有了开源编程工具&#xff0c;在基于开源许可证的情况下您可以轻松学习、修改、提高代码的质量&#xff0c;本文收集了11款最主流的且有价值的开源编程工具。或许会给您带来一丝惊喜。一起来看下吧。 NO.1 Rhomobile Rhodes Ruby或许是Github上第二大流行语言…

数据库触发器

触发器是一种特殊类型的存储过程&#xff0c;它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表&#xff0c;并可以包含复杂的Transact-SQL语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待…

jQuery中ready与load事件的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 jQuery中ready与load事件的区别 概述&#xff1a; 大家在工作中用jQuery的时候一定会在使用之前这样&#xff1a;12345678//document rea…