Android 动画使用解析

Android Lottie动画使用 1.劣势(1)性能不够好—某些动画特效,内存和性能不够好;相对于属性动画,在展示大动画时,帧率较低2.优势(1)开发效率高—代码实现简单,更换动画方便,易于调试和维护。(2)数据源多样性—可从assets,sdcard,网络加载动画资源,能做到不发版本,动态更新(3)跨平台—设计稿导出一份动画描述文件,android,ios,reactnative通用(4)Lottie使用简单,易于上手,非常值得尝试。 阅读详情

Android 动画不详解(主要介绍了使用方法)

Android 中的动画主要分为三类:补间动画,帧动画,和属性动画。
补间动画的效果比较少,也没有改变View的真实位置,只是改了视图显示的位置,位置移动之后点击事件仍发生在原来的位置。
帧动画类似于放电影,一帧一帧的播放就产生了动的效果。
属性动画是3.0之后加入的,3.0之前的设备无法使用属性动画,也可以使用网上的第三方库来兼容3.0以前的设备(第三方库内部做了转换,对3.0以前的设备仍使用补间动画,所以补间动画的缺点仍然存在)。

补间动画

补间动画(View动画)包括四种动画:

  • 平移动画 TranslateAnimation translate
  • 缩放动画 ScaleAnimation scale
  • 旋转动画 RotateAnimation rotate
  • 透明度动画 AlphaAnimation alpha

平移、旋转、和缩放都会涉及初始结束位置或者动画的中心点参数的配置,配置有两种形式:

  • 使用数字:代表移动的像素数;
  • 使用百分比:系统自己根据View的宽高进行换算

参数或者方法说明

  • fromXDelta、fromYDelta、toXDelta、toYDelta : 动画起始位置相对于默认状态的距离。单位是像素或者百分比
  • fromDegrees、toDegrees : 旋转和结束位置相对于默认状态的转动角度
  • pivotX、pivotY : 旋转和缩放的中心点。单位是相对于左上角的像素数或者百分比
  • fromXScale、toXScale、fromYScale、toYScale :缩放的倍率,0.5是原图的一半大小
  • duration : 动画的持续时间。单位是毫秒数
  • fillAfter:动画结束之后,是否停留在结束位置。true/false
  • interpolator : 差值器。默认的有线性,加速,减速三种,可自定义(自定义差值器最后在聊吧)。
  • repeatMode : 重复的模式,有重新开始和反转两种模式。Animation.REVERSE和Animation.RESTART
  • animation.setRepeatCount(100) : 设置重复的次数设置给AnmationSet没效果,要设置给Animation才有用

以xml形式来定义和使用动画

<!--设置一个动画集合-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fillAfter="true">
    <translate
        android:fromXDelta="-100%"
        android:fromYDelta="0"
        android:toXDelta="0%"
        android:toYDelta="100" />
    <rotate
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />
    <scale
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="0"
        android:pivotY="0"
        android:toXScale="1"
        android:toYScale="1" />
    <alpha
        android:fromAlpha="0.5"
        android:toAlpha="1" />
</set>
<!--设置一个单独的动画-->
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fillAfter="true"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360">
</rotate>

下面是在Java代码中使用

Animation animation = AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_translate);
animation.setRepeatCount(3);
imageView.startAnimation(animation);

以Java代码定义和使用补间动画

TranslateAnimation animation = new TranslateAnimation(
           Animation.RELATIVE_TO_SELF,-1,
           Animation.RELATIVE_TO_SELF,1,
           Animation.ABSOLUTE,-100,
           Animation.ABSOLUTE,100);
animation.setDuration(1000);
animation.setFillAfter(true);
animation.setInterpolator(new AccelerateInterpolator());
animation.setRepeatCount(-1);
animation.setRepeatMode(Animation.REVERSE);
imageView.startAnimation(animation);

//这段代码定义了一个在X方向和Y方向上不停做加速运动和减速往复运动的动画
//Animation.RELATIVE_TO_SELF就相当于xml中用百分数表示那种。感兴趣自己去看源码吧

帧动画

所有的动画方式本质都是一样的,隔一段时间改变一下视图的内容或者位置,连续的变动就会产生动画的效果。帧动画也一样,只是把视图的改变全部交给提前设计好的图片,由图片的切换产生动画效果。

使用:
xml中定义一个animation list

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/animation1" android:duration="200"/>
    <item android:drawable="@mipmap/animation2" android:duration="200"/>
    <item android:drawable="@mipmap/animation3" android:duration="200"/>
    <item android:drawable="@mipmap/animation4" android:duration="200"/>
    <item android:drawable="@mipmap/animation5" android:duration="200"/>
    <item android:drawable="@mipmap/animation6" android:duration="200"/>
</animation-list>

在Activity中直接使用就可以了

imageView.setImageResource(R.drawable.anim_airplane);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.start();

属性动画

属性动画是Android API 11加入的动画形式,在补间动画中,只能进行平移、旋转、缩放、透明度的变化以及前面四种形式的组合而产生动画效果,效果是相对比较少的,一些复杂的动画效果实现起来就很很麻烦(如实现一个小球的曲线运动)。
属性动画可以对一个对象的任意属性值进行动画操作,只要这个属性有set方法。

涉及到的类:

  • Animator:属性动画的基类,提供了启动、暂停、重启、终止、以及设置差值器、设置动画时间、添加动画监听器等一系列功能。
  • ValueAnimator:继承自Animator,对任意的值进行动画,为动画提供了一个时间引擎,通过时间引擎来判断当前动画的进度,属性当前的值,以及设置属性值给对象。
  • ObjectAnimator:继承自ValueAnimator,可以对target对象的某一个属性值mProperty进行动画操作,通过直接改变对象的属性值可以很简单的对一个视图进行动画。
  • AnimatorSet:继承自Animator,可以设置按顺序或者同时播放一组动画。

ValueAnimator的使用

ValueAnimator valueAnimator = ValueAnimator.ofInt(0,100);
valueAnimator.setDuration(1000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            //当前值
            int currentValue = (int) animation.getAnimatedValue();
            //当前进度
            float fraction = animation.getAnimatedFraction();

            Log.e("==","currentValue:"+currentValue+"\nfraction:"+fraction);
        }
    });
valueAnimator.start();

ObjectAnimator的使用:

ValueAnimator rotateAnim = ObjectAnimator.ofFloat(imageView,"rotation", 0, 360);
rotateAnim.setRepeatCount(5);
rotateAnim.setRepeatMode(ValueAnimator.REVERSE);

ValueAnimator scaleXAnim = ObjectAnimator.ofFloat(imageView,"scaleX", 1f, 0.5f, 1f);
scaleXAnim.setRepeatCount(5);
scaleXAnim.setRepeatMode(ValueAnimator.REVERSE);

ValueAnimator scaleYAnim = ObjectAnimator.ofFloat(imageView,"scaleY", 1f, 0.5f, 1f);
scaleYAnim.setRepeatCount(5);
scaleYAnim.setRepeatMode(ValueAnimator.REVERSE);

ValueAnimator alphaAnim = ObjectAnimator.ofFloat(imageView,"alpha", 1f, 0.5f, 1f);
alphaAnim.setRepeatCount(5);
alphaAnim.setRepeatMode(ValueAnimator.REVERSE);

AnimatorSet set = new AnimatorSet();
set.playTogether(colorAnim, transYAnim, alphaAnim);
set.setDuration(100);
set.setInterpolator(new LinearInterpolator());
set.start();

自定义差值器和估值器

ValueAnimator transYAnim = ObjectAnimator.ofFloat(imageView,
                        "translationY", 0, 200);
transYAnim.setRepeatCount(5);
transYAnim.setRepeatMode(ValueAnimator.REVERSE);
transYAnim.setInterpolator(new TimeInterpolator() {
          @Override
          public float getInterpolation(float input) {
                 return input;
           }
          });

transYAnim.setEvaluator(new TypeEvaluator<Float>() {
//根据当前进度,使View在Y轴上实现正弦曲线运动
              @Override
              public Float evaluate(float fraction, Float startValue, Float endValue) {
              return (float) Math.sin(fraction * 4 * Math.PI) * (endValue - startValue);
              }
             });
全面解析Android属性动画的使用与实战 Android平台上的动画系统历来是用户界面设计中不可或缺的一部分。通过动画,开发者可以为应用带来更加流畅和动态的用户体验。属性动画是Android 3.0(API 级别 11)引入的一个强大的特性,允许开发者对任何对象的属性进行动画处理,无论是视图还是非视图对象。当属性的动画过程需要自定义逻辑时,可以使用自定义估值器(TypeEvaluator)来决定属性值的变化过程。@Override// 自定义的计算逻辑}); 阅读详情

相关推荐

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应 一般情况下,我们都是在 dialog 里面 放一个 list 控件,然后 用自己的类绑定自己的自绘对象,如同下面: 1.  在 dialog 里面 加一个 list 列表 2. 然后 绑定这个列表 哈哈...

mfreesky的专栏 2170

Andriod anim translate中的属性介绍

TranslateAnimation是Andriod中的补间(Tween)动画中的位移变化的动画 使用时,需要在res下新建Android Resource Directtory,并选择anim。在anim文件夹下new一个Animation Resource File,并在Root element中填写translate即可。 <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.a

weixin_45828419的博客 816

方差分解分析变量筛选与显著性计算

冗余分析(redundancy analysis,RDA)是一种回归分析结合主成分分析的排序方法,也是多响应变量(multiresponse)回归分析的拓展。在进行VPA时,首先就要对这些环境因子进行一个分类,然后在约束其它类环境因子的情况下,对某一类环境因子进行排序分析,这种分析也成为偏分析,即partialRDA。在地球环境科学的实际应用中,可以基于VPA结果得出不同类型的环境因素(如何气候、土壤性质以及植物)对生物群落组成(如植被丰度,微生物群落)的解释程度。对于由或创建的排序对象,函数。

wlh2067的博客 2519

android - anim translate中 fromXDelta、toXDelta、fromYDelta、toXDelta属性

<translate android:fromXDelta="0" android:toXDelta="100%" android:duration="300"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />

4万+

当勒索软件盯上虚拟化层:从CVE-2025-22225漏洞看ESXi安全加固要点

本文深度剖析了针对VMware ESXi虚拟化层的CVE-2025-22225等漏洞链的攻击原理,揭示了攻击者如何利用VMCI、HGFS组件从虚拟机逃逸至宿主机。文章从实战角度出发,系统性地提出了ESXi安全加固的核心策略,包括禁用非必要服务、强化主机配置、实施网络分段、建立实时监控与自动化补丁管理体系,为企业构建纵深防御体系提供了具体可行的操作指南。

terraform7cloud的博客 856

团结引擎+OpenHarmony 2实战篇:从零构建鸿蒙应用开发环境

本文详细介绍了如何从零开始构建鸿蒙应用开发环境,重点讲解了团结引擎与OpenHarmony 2的实战配置步骤。内容包括DevEco Studio安装、OpenHarmony SDK配置、团结引擎集成及项目创建等关键环节,帮助开发者快速搭建高效的开发环境,提升鸿蒙应用开发效率。

weixin_29294395的博客 265

android:anim --translate中的属性

<translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="@android:integer/config_mediumAnimTime" android:fromYDelta="100.0%" android:interpolator="@anim/dece

nate1860的专栏 6117

一文掌握SourceTree使用(超级详细)

SourceTree是一款开源的代码仓库客户端工具,界面美观,操作简单,具有代码克隆、本地创建、提交代码、撤销修改,拉取(pull)代码、上传(push)代码、合并分支等操作。对于软件开发人员是一款必备的应用软件。

GM_115的博客 3万+

Android中动画参数duration,Android之Animation动画各属性的参数意思(二)

现在就来讲讲Animation里这四个标签的属性。一、这四个标签alpha、scale、translate、rotate共有的属性为:android:duration动画持续时间,以毫秒为单位android:fillAfter如果设置为true,控件动画结束时,将保持动画最后时的状态android:fillBefore如果设置为true,控件动画结束时,还原到开始动画前的状态android:fil...

weixin_33260057的博客 4400

【机器人开发】四足机械狗(并联结构)URDF建模与Simscape仿真全流程解析

本文详细解析了四足机械狗(并联结构)从URDF建模到Simscape仿真的全流程开发。内容涵盖SolidWorks建模要点、URDF文件导出与优化、Matlab/Simscape环境搭建,以及并联机构特有的运动控制和步态规划实现,为机器人开发者提供了一套完整的解决方案。

weixin_30642561的博客 529

【雷达成像】基于matlab SAR雷达成像仿真【含Matlab源码 3750期】

SAR雷达成像仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1084

android 动画 xml,Android 使用XML做动画UI的深入解析

效果:http://www.56.com/u82/v_OTM4MDk5MTk.html第一步: 创建anim文件夹放置动画xml文件在res文件夹下,创建一个anim的子文件夹。第二步: 加载动画接着在Activity创建一个Animation类,然后使用AnimationUtils类加载动画xmlAnimation animFadein;@Overrideprotected void onCr...

weixin_39953629的博客 234

042、双管反激的电压应力优势

【摘要】本文通过300W工业电源炸管案例,对比分析了单管与双管反激拓扑的电压应力差异。单管反激因漏感能量难以处理,尖峰电压可达1180V,需依赖RCD吸收电路但效率低下;双管反激通过钳位二极管将漏极电压限制在输入电压水平(实测650V),能量回馈使效率提升2-3%。虽增加两个MOS管,但可选用600V器件(单管需1200V),总成本反降15%以上。作者建议150W以上或高压输入场景优先采用双管反激,其确定的电压应力可显著提升可靠性,避免单管反激的参数玄学问题。关键设计要点包括快恢复二极管选型、紧凑布局及漏感

Jack010169的博客 83

【学习】Android动画解析——类型、使用场景与解析

学习于《Android开发艺术探索》,本文讲解了动画的三大类型以及它们的用法,粗略地解析了属性动画的源码

PanicLin的博客 1574

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android ui动画效果怎么做,Android 使用XML做动画UI的深入解析

效果:http://www.56.com/u82/v_otm4mdk5mtk.html第一步: 创建anim文件夹放置动画xml文件在res文件夹下,创建一个anim的子文件夹。第二步: 加载动画接着在activity创建一个animation类,然后使用animationutils类加载动画xmlanimation animfadein;@overrideprotected void oncr...

weixin_33443333的博客 248

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Android 使用XML做动画UI的深入解析

第一步: 创建anim文件夹放置动画xml文件在res文件夹下,创建一个anim的子文件夹。 第二步: 加载动画接着在Activity创建一个Animation类,然后使用AnimationUtils类加载动画xml 复制代码 代码如下: Animation animF...

163

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【安卓笔记】NineOldAndroids动画兼容库的使用

功能介绍: NineOldAndroids是github上的一个开源项目,其作用是为了在低版本android上(API11以下)使用属性动画。它的原理其实也很简单,主要就是判断当前sdk版本,如果大于API11,那么就调用官方的API,否则自己实现动画效果。另外,在API使用方面,它与官方的属性动画基本一致。比如ObjectAnimator、ValueAnimator等等。

RowandJJ 3358

Android 动画(二) 实战演示——仿网易新闻安卓端菜单栏动画

欢迎转载,转载请注明出处: http://blog.youkuaiyun.com/u010181592 经过上一篇博客 的动画基础知识积累,这次来实战一下,模仿网易新闻 安卓客户端右上角菜单栏出现的动画,效果是这样的; 分析:点击菜单按钮后,显示一层布局,布局出现有动画效果,缩放+透明度渐变; 接着按钮出现 按钮出现动画效果 从小扩大,大于目标大小,然后缩小到正常大小; 按钮出现有时序性;最开始以

我不只是看客的博客 1014

android svga加载动画,android svga使用

首先在项目的build.gradle中加入allprojects {repositories {...maven { url 'https://jitpack.io' }}}然后在app下的build.gradle添加依赖,这里的版本号可以去官网查一下(http://svga.io/index.html)compile'com.github.yyued:SVGAPlayer-Android:2.0...

weixin_36243739的博客 1464

安卓巴士Android开发神贴整理

10个经典的Android开源应用项目 http://www.apkbus.com/android-13519-1-1.html 安卓巴士总结了近百个Android优秀开源项目,覆盖Android开发的每个领域 http://www.apkbus.com/android-17627-1-1.html 一个demo让你掌握Android的各种Servi...

weixin_34308389的博客 125

安卓基本动画的使用及详解

安卓基本动画的使用及详解 每次使用到动画就感觉既熟悉又陌生,只知道大概流程,用到具体的方法,只知道有这样的一个方法,但是又不知到怎样调用出来,最终还是要行百度搜索一下资源,让后复制到项目中,下次使用时 依然会忘记,所以这里写一篇博客笔记,记录一下,加深一下印象,希望以后用到动画可以,随手敲来.也希望对看这篇博客的小伙伴有所帮助. 安卓动画的介绍 View Animation: 这个动画是

MYNAMEQI的博客 804

Hanime1Plugin:Android动画观影插件的完整使用指南与核心价值解析

在当前的移动娱乐时代,Android用户对高质量动画观影体验的需求日益增长。Hanime1Plugin作为一款专为Android设备设计的**动画观影插件**,通过其强大的**媒体兼容性**和**内容聚合能力**,为用户带来了前所未有的观影自由。这款免费工具完美解决了传统动画应用中内容分散、播放体验不一致的核心问题,让用户能够在统一平台享受丰富的动画资源。 ## 🔥 项目亮点与独特价值主张

gitblog_01145的博客 307

Android Animation学习(三) ApiDemos解析:XML动画文件的使用

From: http://www.cnblogs.com/mengdd/archive/2013/09/05/3303403.html Android Animation学习(三) ApiDemos解析:XML动画文件的使用     可以用XML文件来定义Animation。   文件必须有一个唯一的根节点:   , , or 三者之一。   对应的Java类是: Value

fyfcauc的专栏 523
上一篇: BAT大厂Android面试题Java部分问题和答案整理(一)
下一篇: 常用命令行
ApiPlayer
博客等级 码龄12年 34粉丝 17原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值