Android动画之帧动画详解

Android补间动画、帧动画、属性动画详解 介绍补间动画插值器之前我们先来看一幅图,如下:可以看见其实各种插值器都是实现了Interpolator接口而已,同时可以看见系统提供了许多已经实现OK的插值器,具体如下:| java类 | xml id值 | 描述 || AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 动画始末速率较慢,中间加速 | 阅读详情
帧动画的原理:

把将动画拆分为 帧(一张张图片) 的形式,按照顺序播放出来。

帧动画的特点:

优点:使用简单,方便。
缺点:使用大量的图片资源,容易引起OOM。

帧动画的效果:

在这里插入图片描述

图片资源

在这里插入图片描述

帧动画的使用:

首先要把资源文件放到drawable文件夹中
帧动画的使用分为两种:1.Java代码实现 和 2. xml文件实现

  1. Java代码实现

       /**
         * 获取资源
         */
        private void getRecordDrawable() {
            mAnimationDrawable = new AnimationDrawable();
            for (int i = 0; i <= 12; i++) {
                int id = getResources().getIdentifier("record_animate_" + i, "drawable", getPackageName());
                Drawable drawable = getResources().getDrawable(id);
                mAnimationDrawable.addFrame(drawable, 50);
            }
        }
    
        /**
         * 开启动画
         */
        private void start() {
           //oneshot: true只展示一次。
           //         false不停的循环播放动画。
            mAnimationDrawable.setOneShot(true);
            mIvshow.setImageDrawable(mAnimationDrawable);
            // 获取资源对象
            mAnimationDrawable.stop();
            // 在动画start()之前一定要先stop()
            // 不然在第一次动画之后会停在最后一帧
            // 这样动画就只会触发一次
            mAnimationDrawable.start();
        }
    
    
        /**
         * 停止动画
         */
        private void stop() {
            mAnimationDrawable.setOneShot(true);
            mIvshow.setImageDrawable(mAnimationDrawable);
            // 获取资源对象
            mAnimationDrawable.stop();
        }
    
  2. xml文件实现

      <?xml version="1.0" encoding="utf-8"?>
      <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
          android:oneshot="true">
          <!--
           oneshot: true只展示一次。
                    false不停的循环播放动画。
      
           android:duration 图片显示时间长度
      
           -->
      
          <item android:drawable="@drawable/record_animate_1" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_2" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_3" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_4" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_5" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_6" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_7" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_8" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_9" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_10" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_11" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_12" android:duration="50"></item>
          <item android:drawable="@drawable/record_animate_13" android:duration="50"></item>
      
      
      </animation-list>
    
    
      private void startAnim(){
              mIvshow.setImageResource(R.drawable.microphone);
              // 1. 设置动画
              mAnimationDrawable = (AnimationDrawable) mIvshow.getDrawable();
              // 2. 获取动画对象
              mAnimationDrawable.start();
      
          }
    
      private void stopAnim(){
          mIvshow.setImageResource(R.drawable.microphone);
          // 1. 设置动画
          mAnimationDrawable = (AnimationDrawable) mIvshow.getDrawable();
          // 2. 获取动画对象
          mAnimationDrawable.stop();
    
      }   
    
    
  3. kotlin

      class MainActivity : AppCompatActivity(),View.OnClickListener{
      override fun onClick(view: View) {
          var id = view.id;
          if (id == R.id.tvShow){
              if (isOnclick) {
                  isOnclick = false
                  stop()
              } else {
                  isOnclick = true
                  start()
              }
          }
      }
      /**可变变量
       * lateinit 不为null
       * */
      lateinit var mAnimationDrawable: AnimationDrawable;
    
      private var mIvshow: ImageView? = null
      private var mTvShow: TextView? = null
      internal var isOnclick: Boolean = false
      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          setContentView(R.layout.activity_main)
          initView();
      }
      private fun initView() {
          mTvShow = findViewById(R.id.tvShow)
          mIvshow = findViewById(R.id.ivShow)
          mTvShow?.setOnClickListener(this)
          getRecordDrawable()
      }
      fun getRecordDrawable() {
          mAnimationDrawable = AnimationDrawable()
          for (i in 1..13) {
              val id = resources.getIdentifier("record_animate_$i", "drawable", packageName)
              val drawable = resources.getDrawable(id)
              mAnimationDrawable.addFrame(drawable, 100)
          }
      }
      /**
       * 开启动画
       */
      private fun start() {
          //oneshot: true只展示一次。
          //         false不停的循环播放动画。
          mAnimationDrawable.setOneShot(false)
          mIvshow?.setImageDrawable(mAnimationDrawable)
          // 获取资源对象
          mAnimationDrawable.stop()
          // 在动画start()之前一定要先stop()
          // 不然在第一次动画之后会停在最后一帧
          // 这样动画就只会触发一次
          mAnimationDrawable.start()
      }
      /**
       * 停止动画
       */
      private fun stop() {
          mAnimationDrawable.setOneShot(true)
          mIvshow?.setImageDrawable(mAnimationDrawable)
          // 获取资源对象
          mAnimationDrawable.stop()
      }
    }
    

到此为止,此篇帧动画也就介绍完成了。

Android 动画 帧动画 使用详解 在Android开发中经常会用到动画,本文主要是帧动画的实现。帧动画主要实现原理是类似播放电影一样,一帧帧的播放预存好的图片,当播放速度大于人眼视觉存留的速度时,就会成为动画效果。其实手机中的开机动画也是帧动画,bootanimation .zip中存放大量的图片。 实现步骤: 1.创建帧动画播放控制的xml文件 2. 设置播放帧动画载体 3. 使用AnimationDrawable 开启 、关闭帧动画 实现效果及素材 1. 创建帧动画播放控制的xml文件 使用方法如下: 在anim 文件夹下创建一个xml 阅读详情

相关推荐

Android动画(帧动画、补间动画、属性动画)讲解

** Android动画(帧动画、补间动画、属性动画)讲解 ** 首先我们来看看啥是帧动画、补间动画、属性动画。 介绍: 帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 补间动画:指的是做FLASH动画时,在两个关键帧中间需要做“补间动画”,才能实现图画的运动; 属性动画:帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同

程序猿追的博客 2万+

Android帧动画的实现原理,Android Animation(帧动画)原理个人见解

Android 动画分三大类Frame Animation (帧动画)Tween Animation (补间动画)Property Animator (属性动画) 3.0之后同时,复杂程度,也是从简到繁,由易到难,今天先说帧动画。帧动画的使用方式网络上很多很多,也很简单,就不多扯淡,主要说下原理。原理引入ImageView iv_anima = (ImageView) findViewById(R...

weixin_30209121的博客 717

android帧动画详解

学习使我快乐使我开心 安卓的动画大体分为三部分 请看图: 由上图可以知道安卓中动画主要分为这三大类 分别为视图动画(View Animation) ,帧动画(Drawable Animation),属性动画(PropertyAnimation) 根据上图我们就可以知道这章我要讲什么了 哈哈 那就是帧动画 柿子要挑软的捏 难题嘛我们就先从简单的着手 帧动画:图片按照顺序一帧一帧组合而成...

yuhang01的博客 528

Android动画学习之帧动画

帧动画简介     介绍帧动画之前先了解一下‘帧’的概念:帧,影像动画中最小单位,也就是最小的单幅画面。相当于电影脚上的每一格镜头。一帧就是最小的一张单幅画面,多个帧连接在一起就会形成动画。通常所说的帧数,是指的1s时间内传输的帧的数量,也可以理解成图形处理器1s能够刷新的频率。每一帧都是一个静止的图像,快速持续的显示多个连续的帧图像便会形成运动的假象,...

henkun的博客 1080

解析json进行动画展示

可以解析json进行动画展示,里面的有的代码解释清晰,可以用于平常的动画展示。

图信号处理中的多尺度分析:图小波变换与图傅里叶变换的对比与应用

本文深入探讨了图信号处理中的多尺度分析方法,重点对比了图小波变换(GWT)与图傅里叶变换(GFT)的技术特点与应用场景。通过分析图的拓扑结构,GWT展现出强大的局部洞察力,适用于异常检测和社区发现;而GFT则擅长全局频率分析,适合趋势分析和信号去噪。文章结合实战案例,为读者提供了方法选型指南和前沿进展,帮助开发者在生物信息学、社交网络分析等领域高效应用这些技术。

weixin_30369041的博客 407

Android Lottie加载gson文件动画

4.lottie_imageAssetsFolder:动画所依赖的图片目录,在app/src/main/assets/目录下的子目录,该子目录存放所有图片。1.lottie_fileName:在app/src/main/assets目录下的动画json文件名。3.lottie_autoPlay:动画是否自动播放,默认不自动播放。2.lottie_loop:动画是否循环播放,默认不循环播放。在你工程的build.gradle文件里添加如下配置。一:Lottie的使用。

weixin_43117800的博客 2044

SMIC Memory配置与Library Compiler实战:从lib到db的高效转换

本文详细介绍了SMIC Memory Compiler的配置要点与使用Library Compiler将.lib文件高效转换为.db文件的完整流程。文章深入解析了关键配置参数对性能和面积的影响,并提供了从交互式操作到自动化脚本的实战指南,帮助数字芯片设计工程师顺利完成存储器模型的生成与集成,确保Design Compiler能正确调用。

weixin_28314575的博客 336

Android json动画(Lottie)解决:json中有图片、在线预览json动画效果

在线预览json动画效果:https://lottiefiles.com/preview 一、bundle gradle中加入lottie包 implementation 'com.airbnb.android:lottie:3.1.0' 二、在工程app/src/main/下创建文件夹assets,新建时选择Directory,完整路径就是app/src/main/as......

ihoudf 2万+

深入解析fio Benchmark测试:从源码到实践

本文深入解析fio Benchmark测试工具,从入门指南到源码架构分析,详细介绍了其核心模块、关键数据结构和I/O处理机制。通过实战案例展示如何优化存储性能测试,包括内存对齐、多线程调优等技巧,帮助开发者充分利用fio进行精准的存储性能评估。

weixin_42563415的博客 208

增益调度控制 —— 理论、案例与交互式 GUI 实现

本文详细介绍了增益调度控制的基本原理、数学模型及公式推导,探讨了该方法在适应非线性系统和大范围工作条件下的优势与局限。通过航空飞行控制、发动机推力控制以及化工过程控制三个典型案例,我们展示了如何利用调度变量动态调整控制增益,从而使得控制系统在各个工作点均能达到优良性能。为帮助工程师和研究者更直观地理解并验证增益调度控制的实际效果,本文提供了一套基于 Python 与 PyQt6 的交互式 GUI 控制系统代码。用户不仅可以实时查看仿真数据,还能通过在线调节参数直观体验调度控制的优势。

闲人编程的博客 1480

Android 动画之帧动画用法详解

本文目录帧动画概念帧动画实现方法1:xml实现帧动画第一步:导入帧动画素材第二步:创建帧动画文件第三步:布局文件和Activity方法2:用Java代码实现帧动画 帧动画概念 在Android中,帧动画的本质是把一组预先准备好的图片循环切换播放,造成一种动画效果。 帧动画实现 实现帧动画有两种方式,即xml和java 方法1:xml实现帧动画 第一步:导入帧动画素材 把准备的素材放到drawab...

lucashu的博客 1万+

SAP_FI模块_固定资产期初导入全流程(含导入代码)

SAP 期初导入资产主数据以及金额相关的操作全流程记录,包含了批导程序的代码,以及错误记录

风沙的博客 1405

android 帧动画重叠,Android动画之帧动画详解

一.概念帧动画也叫Drawable Animation,是最简单最直观的动画类型,他利用人眼的视觉暂留效应——也就是光对视网膜所产生的视觉在光停止作用后,仍会保留一段时间的现象。在Android中实现帧动画,就是由设计师给出一系列状态不断变化的图片,开发者可以指定动画中每一帧对应的图片和持续时间,然后就可以开始播放动画了。具体有两种方式可以实现帧动画,分别是采用XML资源文件和代码实现。二.实现◆...

weixin_42372963的博客 404

【Claude】Extra inputs are not permitted 错误:代理剥离 Beta 标头的解决方案 bug报错已解决

深入分析Claude Code Extra inputs are not permitted 400错误的技术原理,解析代理剥离Beta标头的根因与多种修复方案。

一键难忘的博客 149

eNSP常见故障处理

eNSP无法启动设备一直停在#井号的问题的解决方案?

lvshiliang123的博客 2万+

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

转载请注明出处:http://blog.youkuaiyun.com/xiaohao0724/article/details/54582965 Android中的动画,大概分为三种: 1、逐帧动画(FrameAnimation) 2、补间动画(TweenAnimation) 3、属性动画(PropertyAnimation) 今天我们就来学习逐帧动画,废话少说直接上效果图

Technology Blogs 2万+

【误码率仿真】基于matlab 小波变换OFDM误码率仿真

其中,与传统的 OFDM 相比,小波变换 OFDM 在进行调制和解调时,使用的是小波变换函数。需要注意的是,由于小波变换函数将频域信号转换为时域信号,因此与传统 OFDM 不同,小波变换 OFDM 中的信号需要在时域上添加循环前缀。与传统的 OFDM 不同,小波变换 OFDM 使用小波函数作为基函数,而非正弦函数作为基函数,因此可以在保持子载波正交性的同时,让子载波之间的带宽变得更加均匀。在频域进行信号加权,然后进行小波逆变换,得到时域信号。在接收端进行信号接收,去掉循环前缀并进行小波变换得到频域信号。

Fanjufei的博客 663

Android的三种动画详解(帧动画、View动画、属性动画)

Android的动画分为了三种, 分别是 帧动画、View动画、属性动画。 1、帧动画 帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。 帧动画的使用很简单,总共就两个步骤: 1、在res/drawable目录下定义一个XML文件,根节点为系统提供的animation-list,然后放入定义更好的图片; 2、使用AnimationDrawable类播放第...

追yi流年 4万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

安卓动画详解——帧动画

安卓动画框架 逐帧动画(Frame Animation):原理就是将一个完整的动画拆成一张张图片,然后将其连贯起来播放。类似动画片。帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容,很适合表现细腻的动画。 补间动画(tweened animation):它提供了AlphaAnimation,RotateAnimation,TranslateAnimation,ScaleAnimation四种动

l_l_b的博客 558

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android开发——View动画、帧动画和属性动画详解

0. 前言 Android动画是面试的时候经常被问到的话题。我们都知道Android动画分为三类:View动画、帧动画和属性动画。先对这三种动画做一个概述。View动画是一种渐进式动画,通过图像的平移、缩放、旋转和透明度等各种渐进式变换完成动画效果。帧动画是通过不停的切换图片实现动画效果。属性动画是不停的改变对象的属性来实现动画效果。1.View动画1.1 系统提供的四种Vie...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 3万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 动画详解之帧动画

android 动画分为视图动画、tween动画、属性动画

一个android开发者的博客 309

android 喇叭帧动画,Android动画详解-帧动画

帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。帧动画的使用很简单,总共就两个步骤:1、在res/drawable目录下定义一个XML文件,根节点为系统提供的animation-list,然后放入定义更好的图片;2、使用AnimationDrawable类播放第一步定义好的Drawable中的图片,形成动画效果;xml定义资源android:oneshot...

weixin_27869497的博客 313

Android的三种动画详解(帧动画,View动画,属性动画)

设定起始和终止位置,中间会自动补齐,有平移、缩放、旋转、透明四种选择。对应的类为TranslateAnimation、ScaleAnimation、RotateAnimation、AlphaAnimation。可以使用xml配置资源文件实现,也可以用代码实现,这里用代码实现。具体为:右键点击drawable文件夹->New→Drawable Resource File。缺点:交互性差,当动画结束后会回到初始位置,对于交互性要求较高的使用属性动画。优点:效率高,使用方便。

lhm1124的博客 3516

android针动画详解,Android动画 详解(二 帧动画 属性动画 )

一 帧动画介绍帧动画 就类似于 电影那种一张图一张图的切换XML代码先通过XML配置好 需要切换的图片 和 执行是否循环 和执行时间等 文件放在res/drawable 目录下xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true">JAVA调用XML开启动画先创建一个IamgeView ...

weixin_34088048的博客 203
上一篇: java.lang.IllegalArgumentException: Called attach on a child which is not detached: ViewHolder
下一篇: io.agora.rtc.internal.AudioRoutingController$HeadsetBroadcastReceiver
jhonjson
博客等级 码龄11年 220粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值