Android逐帧动画实现代码

发布时间 - 2026-01-10 22:45:24    点击率:

逐帧动画(Frame-by-frame Animations)顾名思义就是一帧接着一帧的播放图片,就像放电影一样。可以通过xml实现也可以通过java代码实现。逐帧动画适合实现比较简单的动画效果,如果要实现复杂动画不太建议使用逐帧动画。

xml方式实现:

step 1 : 在res/drawable目录下一个文件sample_animlist.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="@mipmap/sample_1"
 android:duration="100" />
 <item
 android:drawable="@mipmap/sample_2"
 android:duration="100" />
 <item
 android:drawable="@mipmap/sample_3"
 android:duration="100" />
 <item
 android:drawable="@mipmap/sample_4"
 android:duration="100" />
 <item
 android:drawable="@mipmap/sample_5"
 android:duration="100" />
 <item
 android:drawable="@mipmap/sample_6"
 android:duration="100" />
</animation-list>

动画列表(animation-list)由一个或者多个item节点组成,item节点用来声明一个动画帧
drawable: 该帧的图片资源
duration : 播放时间 单位为毫秒
oneshot : 是否只播放一次,true表示只会播放一次,false表示一直循环播放

step 2:

利用ImageView作为播放载体

 <ImageView
 android:id="@+id/iv_ani"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@drawable/sample_animlist" />


step3: 在Activity实现初始化 、暂停、播放。

public class MainActivity extends AppCompatActivity {

 private ImageView iv_ani;
 private AnimationDrawable mAnimationDrawable;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 iv_ani = (ImageView) findViewById(R.id.iv_ani);
 mAnimationDrawable = (AnimationDrawable) iv_ani.getDrawable();
 }

 @Override
 public void onWindowFocusChanged(boolean hasFocus) {
 super.onWindowFocusChanged(hasFocus);
 //window初始化完毕 开始播放动画
 animationStart();
 }

 @Override
 protected void onPause() {
 animationStop();
 super.onPause();
 }

 private void animationStart() {
 if (null != mAnimationDrawable)
  mAnimationDrawable.start();//开始播放
 }

 private void animationStop() {
 if (null != mAnimationDrawable)
  mAnimationDrawable.stop();//暂停播放
 }
}

纯Java方式实现

public class MainActivity extends AppCompatActivity {

 private ImageView iv_ani;
 private AnimationDrawable mAnimationDrawable;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 iv_ani = (ImageView) findViewById(R.id.iv_ani);
 initAnimationDrawable();
 }

 private void initAnimationDrawable(){
 mAnimationDrawable = new AnimationDrawable();
 for (int i = 1; i <= 4; i++) {
  int id = getResources().getIdentifier("sample_" + i, "mipmap", getPackageName());
  Drawable drawable = getResources().getDrawable(id);
  mAnimationDrawable.addFrame(drawable, 100);
 }
 mAnimationDrawable.setOneShot(false);
 iv_ani.setImageDrawable(mAnimationDrawable);

 }
}

addFrame(Drawable frame, int duration) : 添加一帧,并设置该帧显示的持续时间

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # 逐帧动画  # Android Studio实现帧动画  # Android 帧动画使用详情  # Android动画系列之帧动画和补间动画的示例代码  # Android 帧动画的实例详解  # Android实现帧动画的两种方式  # 可以通过  # 就像  # 多个  # 不太  # 只会  # 顾名思义  # 大家多多  # 持续时间  # 播放时间  # item  # false  # mipmap  # duration  # http  # schemas  # apk  # oneshot 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  java中使用zxing批量生成二维码立牌  Laravel集合Collection怎么用_Laravel集合常用函数详解  JS弹性运动实现方法分析  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何用JavaScript实现文本编辑器_光标和选区怎么处理  香港服务器租用费用高吗?如何避免常见误区?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何为不同团队 ID 动态生成多个独立按钮  Python文件流缓冲机制_IO性能解析【教程】  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Android中AutoCompleteTextView自动提示  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何在阿里云购买域名并搭建网站?  高防服务器如何保障网站安全无虞?  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  如何快速搭建自助建站会员专属系统?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  php json中文编码为null的解决办法  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  如何在腾讯云免费申请建站?  如何在橙子建站上传落地页?操作指南详解  如何用虚拟主机快速搭建网站?详细步骤解析  如何在宝塔面板创建新站点?  香港服务器如何优化才能显著提升网站加载速度?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  微信小程序 闭包写法详细介绍  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  如何在Windows环境下新建FTP站点并设置权限?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何用AI帮你把自己的生活经历写成一个有趣的故事?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何在阿里云虚拟服务器快速搭建网站?  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  如何在服务器上配置二级域名建站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  网站制作报价单模板图片,小松挖机官方网站报价?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  JavaScript常见的五种数组去重的方式  Laravel API资源类怎么用_Laravel API Resource数据转换  如何在Tomcat中配置并部署网站项目?