Android动画之帧动画

news2025/8/12 0:08:35

在Android开发时,为了实现一些动态的炫酷的效果,我们常用到帧动画,View动画(补间动画)和属性动画,今天就来总结下我在使用帧动画的实现方式。

1、什么是帧动画?

帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。当播放速度达到一定速度后,就会在视觉上看起来像视频播放一样。

“人眼舒适放松时可视帧数是每秒24帧,集中精神时不超过30帧,眨眼时睁开眼瞬间可以捕捉到的帧数是30帧以上,为了性能优化,一般稍大于30帧就差不多了,当然,现在的手机,一般为60帧,又些可以开到120帧,每秒刷新120次,在界面切换和浏览各种界面时会流畅很多,当然带来的就是消耗更多的资源。

2、实现大致步骤

  1. 在res/drawable目录下定义一个XML文件,根节点为系统提供的animation-list,然后放入定义更好的图片,对每一个图片设置属性;
  2. 使用AnimationDrawable类播放第一步定义好的Drawable中的图片,形成动画效果;

3、关键属性配置

  1. 在xml中,首先是根结点的 android:oneshot="true",这个属性是代表动画执行多少次,例如,在进入App的入场动画,可设置成只播放一次,例如一些场景星空动画,他要星星一直闪烁,就可以设置成false,他会一直播放。2.在每个item中,
  2. <item
        android:drawable="@drawable/welcome_00000"
        android:duration="49" />
    drawable代表设置的资源,duration代表展示的时间

 4、优缺点

优点:是真的简单啊!

缺点:

  1. - 系统会把每一帧图片读取到内存中

  2. - 当图片很多且每张都很大的情况下,容易出现卡顿,甚至 OOM

5、优化点

帧动画其实在App中并不是很友好,因为大量的图片资源来的性能上的影响资源占用过大(例如在界面加载时加载资源过多,绘制压力变大),也会导致内存剧烈抖动,也会导致包体过大。那么可以从以下方式进行优化:

  1. 图片压缩和转码,一般UI给你的图片小则几十K,大则1,2M,这样肯定是不可取的,根本用不着这样大的图片,这时候就可以进行图片压缩和转码,网上很多压缩和转码的网页,可以把图片资源压缩转码后再拿到项目中引用。转码我推荐的是转成webp格式。(tips:1.webp是由谷歌推出的一种全新图片文件格式,与JPEG格式一样,Webp是一种有损压缩格式。2.webp文件格式和JPEG类似,也是通过牺牲图片质量来降低图片文件大小,但能在相同质量的情况下比JPEG文件尺寸小巧许多。目前的Chrome应用商店图片已全部转换为WebP格式。)压缩的话,这个网站很好用,TinyPNG – Compress WebP, PNG and JPEG images intelligently
  2. 延迟加载,在一些复杂的界面,在onCrete的时候,大量的VIew会进行绘制,如果你的App本来就性能堪忧,这时候再同时进行动画加载,那么是考虑使用Hanlder.postDelayed()方法延迟一两秒执行,这样会好很多,之前我们就出现过,界面卡顿的问题,延迟执行后好多了。
  3. 别把duration设的太低,小了就代表着刷新率贼高,让用户看着不卡顿就行了。
  4. 图片回收和复用:BitmapFactory 加载图片通过 Options 配置参数优化
    • inPreferredConfig 设置颜色模式,不带透明度的 RGB_565 内存只有默认的 ARGB_8888 的一半
    • inSampleSize 根据显示控件的大小对图像采样,返回较小的图像以节省内存
    • inMutable 设置解码得到的 bitmap 可变
    • inBitmap 复用前一帧图片,避免内存抖动
    • 对于单次播放的帧动画,每一帧图片使用之后及时复用或者回收是合理的
  5. 使用SoftReference(软引用)如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足,就会回收这些对象的内存(系统自动帮你回收,不用操心多好)

6.代码实现

xml动画资源文件:anim_login_start_loading.xml

<?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/welcome_00000"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00001"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00002"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00003"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00004"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00005"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00006"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00007"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00008"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00009"
        android:duration="49" />
    <item
        android:drawable="@drawable/welcome_00010"
        android:duration="49" />
</animation-list>

代码进行实现:很简单,img是一个imageView,作为动画的容器,记得在src配置动画的第一张图片哦~,实现很简单,就是使用的AnimationDrawable实现的,当然也不一定是用ImageView作为容器哈。

img.setImageResource(R.drawable.anim_login_start_loading)
        val anim = img.drawable as AnimationDrawable
        anim.start()

7、实现效果:

 

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

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

相关文章

什么是IO

java.io.File类&#xff1a;文件和文件目录路径的抽象表示形式&#xff0c;与平台无关 File 能新建、删除、重命名文件和目录&#xff0c;但 File 不能访问文件内容本身。 如果需要访问文件内容本身&#xff0c;则需要使用输入/输出流。 想要在Java程序中表示一个真实存在的文…

谈谈RabbitMQ的五种消息模型以及SpringAMQP的使用

目录一、前言1. RabbitMQ中的基本概念2. docker部署RabbitMQ3. AMQP与JMS的简单介绍4. 演示demo搭建结构二、Basic Queue三、Work Queue四、发布订阅模式1. Fanout2. Direct3. Topic五、消息转换器1. 默认转换器2. 配置JSON转换器一、前言 1. RabbitMQ中的基本概念 message 消…

逻辑回归损失函数原理笔记

损失函数&#xff1a; 之前一直想不明白这个式子为什么可以当损失函数。所以记录一下。 首先&#xff0c;假如一个属于1类的样本&#xff0c;经过预测&#xff0c;h(x)0.3,得出0.3的概率是属于1类&#xff0c;也就是0.7的概率是属于0类&#xff0c;那么其误差就是0.7。 相反&…

配置七牛云的自定义域名以及配置域名CNAME

背景&#xff1a;最近在使用七牛云的过程中发现一个问题&#xff0c;七牛云的测试域名是有时效限制的且到期后重新申请会改变&#xff0c;自己业务方生产和测试环境需要使用固定的域名来配置图片访问&#xff0c;这时就需要绑定到自己的域名了。 1、配置七牛云自定义域名 这个…

学Golang,看这一篇

去年学了一遍 Golang&#xff0c;发现都给整忘了&#xff0c; 好饭不怕晚&#xff0c;再次二刷。 其实学好 Golang 并不难&#xff0c;关键是要找到它和其它语言不同和众里寻他千百度相通的微妙之处&#xff0c;就能很优雅地使用 Golang&#xff0c;以下会涉及较多知识点。特殊…

(Java高级教程)第一章Java多线程基础-第一节6:多线程案例

文章目录一&#xff1a;单例模式&#xff08;1&#xff09;设计模式概述&#xff08;2&#xff09;单例模式概述&#xff08;3&#xff09;单例模式实现A&#xff1a;饿汉模式B&#xff1a;懒汉模式①&#xff1a;单线程版②&#xff1a;多线程版③&#xff1a;多线程版&#x…

alpha模型:打开量化投资的黑箱;附创业板布林带策略代码:年化15%。

原创文章第108篇&#xff0c;专注“个人成长与财富自由、世界运作的逻辑&#xff0c; AI量化投资”。 关于量化投资&#xff0c;我们写了不少文章。从数据准备&#xff0c;预处理&#xff0c;因子特征工程&#xff0c;因子分析&#xff0c;规则策略&#xff0c;模型&#xff0c…

平安城市解决方案-最新全套文件

平安城市解决方案-最新全套文件一、建设背景目前平安城市视频监控面临的主要问题&#xff1a;1、看不清2、传不回3、存不下4、找不着5、易泄露二、思路架构三、建设方案四、获取 - 平安城市全套最新解决方案合集一、建设背景 平安城市是一个特大型、综合性非常强的管理系统&am…

JSP文件上传

JSP 提供了上传和下载的功能&#xff0c;用户釆用此功能&#xff0c;可以轻松实现文件的传输。下面介绍文件上传与下载的操作。 用户通过一个 JSP 页面上传文件给服务器时&#xff0c;该 JSP 页面必须含有 File 类型的表单&#xff0c; 并且表单必须将 enctype 的属性值设置为…

Node.js 是怎么找到模块的?

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天我们来看看 Node.js 模块查找的原理。 模块种类 模块有三种来源。 核心模块&#xff1a;Node.js 内置的包。比如 http、fs、path&#xff1b; 自定义模块&#xff1a;NPM 包。比如 axios、express&#xff0c;位于 node_mo…

virtualBox虚拟机之间网络互通设置

环境 主机&#xff1a;Win10 虚拟机&#xff1a;Ubuntu 20.04 虚拟机&#xff1a;VirtualBox 6.1 模式虚拟机→主机主机→虚拟机虚拟机↔虚拟机虚拟机→Net/LANNet/LAN→虚拟机NAT√端口转发√端口转发NATservice√端口转发√√端口转发Host-Only√√√Internal√Bridged√√…

【快速上手系列】用于登录的验证码制作(ValidateCode)和Javaweb自带的老式验证码快速上手

【快速上手系列】用于登录的验证码制作&#xff08;ValidateCode&#xff09;和Javaweb自带的老式验证码快速上手 验证码 简介 验证码&#xff08;CAPTCHA&#xff09;是“Completely Automated Public Turing test to tell Computers and Humans Apart”&#xff08;全自动…

易基因|疾病研究:DNA甲基化和转录组学特征在高浆卵巢癌复发和耐药过程中高度保守

易基因&#xff5c;疾病研究&#xff1a;DNA甲基化和转录组学特征在高浆卵巢癌复发和耐药过程中高度保守 大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年07月27日&#xff0c;《J Exp Clin Cancer Res》杂志发表了题为“DNA me…

Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(三)

前言&#xff1a; 前文Linux|centos7下部署安装alertmanager并实现邮箱和微信告警&#xff08;二&#xff09;_晚风_END的博客-CSDN博客 实现了告警系统模块的部署和测试&#xff0c;主要的告警范围是服务器节点的操作系统内存&#xff0c;磁盘空间的使用率这些方面&#xff0…

甘露糖-聚乙二醇-N-羟基琥珀酰亚胺mannose-PEG-NHS

甘露糖-聚乙二醇-N-羟基琥珀酰亚胺mannose-PEG-NHS 琥珀酰亚胺又称为丁酰亚胺或丁二酰亚胺&#xff0c;是一种无色针状结晶或具有淡褐色光泽的薄片固体&#xff0c;味甜。易溶于水、醇或氢氧化钠溶液&#xff0c;不溶于醚、氯仿等&#xff0c;可以提供PEG接枝修饰甘露糖&#…

精彩回顾!2022VisionChina深圳展圆满落幕

11月16日&#xff0c;维科杯•OFweek 2022中国工业自动化及数字化行业年度评选颁奖典礼在深圳大中华喜来登酒店举行&#xff0c;经过OFweek网络投票、专家组评审及组委会综合评审三轮激烈紧张的评选&#xff0c;昂视凭借“PiqsVT智能视觉系统”在近300个参评项目中脱颖而出&…

Linux三个踩坑过程记录

今早花了一早上的时间解决了三个Linux的问题&#xff0c;分别是读写权限、克隆虚拟机开启问题和Xshell连接VM虚拟机问题。平时用虚拟机比较少&#xff0c;现在刚一开始用&#xff0c;就给我来了三个问题让我解决&#xff0c;真是含泪解决问题&#xff0c;但现在解决了&#xff…

预定2.0 Crack ZoomCharts JavaScript 最值得探索

世界上最可探索的 JavaScript 图表 将内容深入分析和支持多点触控的大数据可视化轻松集成到您的 Web 项目中--ZoomCharts JavaScript 快速、简单且令人印象深刻的 JavaScript 图表 以极快的速度将 javascript 图表与令人惊叹的向下钻取功能集成&#xff0c;一定会给您的团队、…

Word控件Spire.Doc 【文本】教程(22) ;在 Word 中应用强调标记(C#/VB.NET)

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

Live800:在线客服系统如何帮助企业创造持续的服务价值?

德鲁克管理箴言&#xff1a;企业的唯一目的就是“创造顾客”。 如何创造顾客&#xff1f;只能依靠产品和服务。产品和服务是连接企业与客户的天然纽带和必然桥梁。 企业依靠持续不断生产满足客户需求、符合客户价值主张的优质产品和服务来创造客户、留住客户并建立客户忠诚度…