我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android 属性动画原理与DataBinding

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android 属性动画原理与DataBinding

Android 属性动画原理与DataBinding

看到这个标题的时候你可能会有疑问,属性动画和 DataBinding 之间有什么关系?我个人理解的是:它们内部的实现思想有相似之处。这篇文章主要对 Android 属性动画的知识通过文字进行整理记录,内容参考于《Android开发艺术探索》,在最后会给出我如此理解属性动画和 DataBinding 的原因。

Android动画概述:

Android 的动画可以分为三种:View 动画、帧动画和属性动画,View 动画通过对场景里的对象不断做图像变化(平移、缩放、旋转、透明度)从而产生动画效果,View 动画支持自定义。帧动画通过顺序播放一系列图像产生动画效果,可以简单理解为图片切换动画,图片过大会导致 OOM。属性动画通过动态的改变对象的属性从而达到动画效果,属性动画为API 11的新特性,在低版本需要通过兼容库来使用它。

属性动画:

属性动画可以对任意对象的属性进行动画而不仅仅是 View,在一个时间间隔内可以完成对象从一个属性值到另一个属性值的改变。因此属性动画几乎是无所不能的,只要对象有这个属性,它都能实现动画效果。、

使用:

属性动画中有 ValueAnimator 、ObjectAnimator 和 AnimatorSet 等概念,其中 ObjectAnimator 继承自 ValueAnimator,用来是实现一个属性动画,AnimatorSet 是动画集合,可以定义一组动画,它们使用起来是及其简单的,在此不再举例。属性动画除了通过代码实现以外,同View动画一样,也可以通过XML来定义,属性动画需要定义在res/animator目录下,其中的 set、objectAnimator 和 animator 标签分别对应 AnimatorSet、ObjectAnimator 和 ValueAnimator 。尽管属性动画可以通过XML来实现,但在实际开发中往往会采用代码来实现,因为很多时候一个属性的起始值是无法提前确定的。

插值器和估值器:

TimeInterpolator 译为时间插值器,它的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比,系统预置的有 LinearInterpolator (线性插值器:匀速动画)、 AccelerateDecelerateInterpolator (加速减速插值器:动画两头慢中间快)和 DecelerateInterpolator (减速插值器:动画越来越慢)等。

TypeEvaluator 译为类型估值算法,也叫估值器,它的作用是根据当前属性改变的百分比来计算改变后的属性值,系统预置的有 IntEvaluator (针对整型属性)、 FloatEvaluator (针对浮点型属性)和ArgbEvaluator (针对 Color 属性)。属性动画中的插值器( Interpolator )和估值器( TypeEvaluator )很重要,它们是实现非匀速动画的重要手段。

属性动画的监听器:

属性动画提供了监听器来监听动画的播放过程,主要有AnimatorUpdateListenerAnimatorListener 。AnimatorListener 可以监听动画的开始、结束、取消以及重复播放 ,同时为了方便开发,系统还提供了 AnimatorListenerAdapter 这个类,他是 AnimatorListener 的适配器类, 可以有选择的实现这四个监听方法。AnimatorUpdateListener 比较特殊,他会监听整个动画过程, 动画是由许多帧组成的,每播放一帧对应监听方法就会被调用一次。

对任意属性做动画:

属性动画可以对任意属性添加动画效果,假如我们要给一个 button 加一个动画,让这个 button 的宽度增加 100px,我们可能会这样写:


@Override
public void onClick(View v){
   ObjectAnimator.ofInt(v,"width",100).setDuration(1000).start();
}

但是当点击按钮后并没有效果,不是说好的可以对任意属性实现动画嘛,其实没效果是对的,下面分析属性动画的原理:属性动画要求动画作用的对象提供该属性的 get 和 set 方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次去调用 set 方法,每次传递给 set 方法的值都不一样,确切的来说是随着时间的推移,所传递的值越来越接近最终值。总结一下,我们对 object 的属性 abc 做动画,如果想让动画生效,要同时满足以下两个条件:

1.object 必须提供 setAbc 方法,如果动画的时候没有传递初始值,那么还要提供 getAbc 方法,因为系统要去取 abc 属性的初始值(若这条不满足,程序直接 Crash)

2.object 的 setAbc 对属性 abc 所做的改变必须能够通过某种方法反映出来,比如会带来 UI 的改变之类的(如果这条不满足,动画无效果但不会Crash)

这跟 DataBinding 中的思想是一样的,这里的object对应于DataBinding中的 ViewModel,ViewModel 的成员变量 set 方法中需要提醒 DataBinding 去更新 view 的内容,如下:


  public void setName(String name) {
    this.name = name;
    notifyPropertyChanged(BR.name);
  }

针对以上问题,官方文档告诉我们有3种解决方法:

给你的对象加上 get 和 set 方法,如果有权限的话 用一个类来包装原始对象,间接为其提供 get 和 set 方法 采用 ValueAnimator,监听动画过程,自己实现属性的改变

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:C#数据绑定(DataBinding)简单实现方法C#中DataBindings用法实例分析Android dataBinding与ListView及事件详解Android DataBinding的官方双向绑定示例android使用DataBinding来设置空状态Android 开发之dataBinding与ListView及事件DataBinding onClick的七种点击方式


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android 属性动画原理与DataBinding

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android 属性动画原理与DataBinding

Android 属性动画原理与DataBinding 看到这个标题的时候你可能会有疑问,属性动画和 DataBinding 之间有什么关系?我个人理解的是:它们内部的实现思想有相似之处。这篇文章主要对 Android 属性动画的知识通过文字
2022-06-06

Android动画-属性动画

属性动画 所谓属性动画,就是改变对象Object的属性来实现动画过程。属性动画是对View的动画的扩展,通过它可以实现更多漂亮的动画效果。同时属性动画的作用对象不仅仅是View,任何对象都可以。 属性动画的作用效果就是:在一个指定的时间段内
2022-06-06

Android属性动画

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、常用API3.1 Valu
Android属性动画
2023-12-22

Android动画探索之属性动画

这篇文章来总结下属性动画,通过下面几点来了解下属性动画的内容: 属性动画概述 属性动画工作原理 ValueAnimator ObjectAnimator ValueAnimator和ObjectAnimator区别 插值器 估值期 插值器和
2022-06-06

Android应用中实现属性动画的原理是什么

今天就跟大家聊聊有关Android应用中实现属性动画的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android动画概述:Android 的动画可以分为三种:View 动
2023-05-31

Android 动画(View动画,帧动画,属性动画)详细介绍

0. 前言 Android动画是面试的时候经常被问到的话题。我们都知道Android动画分为三类:View动画、帧动画和属性动画。先对这三种动画做一个概述:View动画是一种渐进式动画,通过图像的平移、缩放、旋转和透明度等各种渐进式变换完
2022-06-06

Android帧动画、补间动画、属性动画用法详解

在安卓开发中,经常会使用到一些动画,那么在开发中,如何使用这些动画呢? 帧动画:不是针对View做出一些形状上的变化,而是用于播放一张张的图片,例如一些开机动画,类似于电影播放,使用的是AnimationDrawable来播放帧动画 res
2022-06-06

图文详解Android属性动画

Android中的动画分为视图动画(View Animation)、属性动画(Property Animation)以及Drawable动画。从Android 3.0(API Level 11)开始,Android开始支持属性动画,本文主
2022-06-06

android 帧动画,补间动画,属性动画的简单总结

帧动画——FrameAnimation 将一系列图片有序播放,形成动画的效果。其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建animation-list为根节点的资源文件
2022-06-06

浅谈Android中视图动画的属性与使用

简介Android动画主要包括视图动画和属性动画,视图动画包括Tween动画和Frame动画,Tween动画又包括渐变动画、平移动画、缩放动画、旋转动画。 Tween动画的基本属性 目标 View; 时常 durati
2022-06-06

Android 属性动画:一文让你彻底了解和掌握属性动画用法

本文目录属性动画概述属性动画用法对象动画(ObjectAnimator)方法1:Java代码实现对象动画方法2:XML实现对象动画值动画(ValueAnimator)PropertyValueHolder动画组合(AnimatorSet)差
2022-06-06

Android动画 实现开关按钮动画(属性动画之平移动画)实例代码

Android动画 实现开关按钮动画(属性动画之平移动画),最近做项目,根据项目需求,有一个这样的功能,实现类似开关的动画效果,经过自己琢磨及上网查找资料,终于解决了,这里就记录下:在Android里面,一些炫酷的动画确实是很吸引人的地方,
2022-06-06

Android源码解析之属性动画详解

前言 大家在日常开发中离不开动画,属性动画更为强大,我们不仅要知道如何使用,更要知道他的原理。这样,才能得心应手。那么,今天,就从最简单的来说,了解下属性动画的原理。ObjectAnimator.ofInt(mView,"width",10
2022-06-06

Android模拟开关按钮点击打开动画(属性动画之平移动画)

在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率。另外说到动画,在Android里面支持两种动画:补间动画和属性动画,至于这两种动画的区别这里不再介绍,希望开发者都能在
2022-06-06

Android中转场动画的实现与兼容性处理

前言 在 Android 5.0 之前,我们已经有了 overridePendingTransition() 方法来实现一些转场效果。然而,在 Android 5.0 以后,转场效果更加炫酷。 比如下面的动画:一、Android L 中的转
2022-06-06

Android属性动画实现炫酷的登录界面

我们聊聊我们常写的登录界面,这个界面我相信很多人都写过,而且也没什么难度,但是如果要实现比较不一般的效果,那就要花点心思了,先看看项目的效果吧:我一直都不知道怎么在编辑框连设置图片大小,所以这个图不怎么样适配编辑框了,大家先凑合着看看。 我
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录