当前位置: 首页 > news >正文

一起Talk Android吧(第四百八十四回:使用逐帧动画实现倒计时效果)

文章目录

  • 概念介绍
  • 使用方法
  • 注意事项

各位看官们大家好,上一回中咱们说的例子是"如何修改Spinner的倒三角",这一回中咱们说的例子是" 使用逐帧动画实现倒计时效果"。闲话休提,言归正转,让我们一起Talk Android吧!

概念介绍

我们在前面章回中介绍了各种类型的视图动画,这些动画都可以归类为补间动画,本章回将介绍另外一种视图动画:逐帧动画

逐帧动画类似电影,电影是按照一定的速度依次播放每张胶片中的画面,逐帧动画则是按照一定的速度一帧一帧地播放帧中的内容,进而组成一个完整的动画。我们需要做的是添加帧,以及的控制帧的播放速度。

使用方法

明白逐帧动画的概念后,我们通过文字结合代码的方式来介绍如何使用逐帧动画;

  1. 在drawable目录下创建资源文件fram_anima.xml,该资源文件就是动画文件,文件中使用<animation-list>标签和它的item属性;
<?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/ic_num6" android:duration="1000"></item>
    <item android:drawable="@drawable/ic_num5" android:duration="1000"></item>
    <item android:drawable="@drawable/ic_num4" android:duration="1000"></item>
    <item android:drawable="@drawable/ic_num3" android:duration="1000"></item>
    <item android:drawable="@drawable/ic_num2" android:duration="1000"></item>
    <item android:drawable="@drawable/ic_num1" android:duration="1000"></item>
</animation-list>
  1. 创建一个ImageView控件,并且把动画文件赋值给控件的src属性(background属性也可以);
<ImageView
    android:id="@+id/id_iv_frame_anima"
    android:src="@drawable/frame_anima"
    android:layout_width="56dp"
    android:layout_height="56dp">
</ImageView>
  1. 在代码中获取ImageView控件以及控件中的动画资源;
  2. 使用动画资源播放动画;
mImageViewFrameAnima = mBinding.idIvFrameAnima;
AnimationDrawable animationDrawable = (AnimationDrawable) mImageViewFrameAnima.getDrawable();
animationDrawable.start();

我们在动画文件中添加了6个属性,每个属性是一张图片,图片的内容从6到1.运行动画就会出现从6到1的倒计时效果,并且动画反复运行。我们在这里就不演示程序的运行结果了,希望大家自己动手去实践。

注意事项

在使用逐帧动画时还有一些细节需要注意,接下来我们详细说明:

  1. <animation-list>标签中的oneshot用来控制动画的播放次数,如果值为true表示只播放一次动画,如果值为false表示无限次地播放动画,默认值为false;
  2. 属性表示动画中的一帧,它的duration表示该帧的播放时间,单位为毫秒;
  3. 代码中逐帧动画的类型为AnimationDrawable类型,在从图片控件中获取动画文件时需要做类型转换;
  4. 逐帧动画与其它视图动画的类型不同,使用方法也不同;

看官们,关于"使用逐帧动画实现倒计时效果"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

相关文章:

  • SpringBoot整合Slf4j+logback日志框架
  • 【数据结构和算法】使用数组的结构实现链表(单向或双向)
  • java 分布式缓存 redis持久化 redis主从 Redis哨兵 Redis分片集群
  • 微服务介绍
  • 【数据结构】ArrayList的具体使用(杨辉三角、扑克牌游戏)
  • 春晚背后的“新技术”,腾讯技术助力央视频春晚“新看法”
  • 进阶2 条件查询
  • Swift 周报 第二十一期
  • 酒店预订订单的分析与建模【决策树、xgboost】
  • 小程序项目学习--第六章:项目实战二、推荐歌曲-歌单展示-巅峰榜-歌单详情-页面优化
  • MongoDB ObjectId
  • 分布式锁原理及Redis如何实现分布式锁
  • buctoj-2023寒假集训-进阶训练赛(十六)
  • 辨别三星内存条的真假
  • 数据结构 - 树和二叉树
  • 【C++之类和对象】初识类和对象
  • React(一) —— 组件的创建与state
  • mysql-视图的定义和简单使用
  • PTA L1-027 出租(详解)
  • XXE漏洞常见利用点总结
  • 《微信小程序案例9》小程序登录流程
  • UNI-APP安卓本地打包详细教程(保姆级)
  • Flutter 实现你所谓的弹窗 (对话框)
  • uniapp实现公众号H5、小程序和App微信授权登录功能
  • Android 控件描边、加阴影
  • 收藏这份Android Framework开发入门指南,带你步入Android系统开发的殿堂
  • Swift5中String、数组相互转换
  • 一次搞懂Java如何调用Kotlin的高级特性
  • Mac使用Python接入东方财富量化接口Choice,调试与获取数据
  • Android Bluetooth(一)——蓝牙的开启和搜索