谈谈android的动画

2023-05-16

android动画为app提供更丰富、更绚丽的视觉效果,因此app或多或少都会添加动画效果。在此总结一下,本人android开发过程中,有关动画的内容。

一、android动画种类和区别

android动画大类可以分为两类:位图动画和矢量图(SVG)动画。我们都知道,位图在放大后会变模糊,而矢量图则不会。因此位图通过动画变大后有可能会变模糊,而矢量图动画则不会。原则上矢量图动画可以实现所有需要的效果,但是矢量图实际上是类似程序员自己在画布上面画直线、正方形、圆等,可以很自由的定制画面的内容,简单的图形我们可以画出来,但是实际东西是很复杂的,就比如一个简单的人在走路,要用矢量图来画就很麻烦,效率也不高。实际开发中如果碰到比较复杂的动画效果,一般使用第三方库,后面会提到。

1. 位图动画

android系统为开发者提供了三种位图动画方式:补间动画、帧动画、属性动画。

这三种动画的主要区别是:帧动画首先导入若干张静态图片,然后我们通过依次显示这些图片,让人眼产生错觉,看起来画面好像动起来,跟以前的胶片电影类似。补间动画和属性动画开发者都只需指定动画开始以及动画结束这两个关键帧, 而动画变化的"中间帧"则由系统计算自动补齐,比如只要告诉系统视图View开始的位置以及结束的位置,系统会自动将视图从开始的位置移动到结束的位置。补间动画和属性动画的区别在于,补间动画只是展示视图的动画过程,并不会改变视图的实际属性值,而属性动画除了展示视图的动画过程外,视图的属性值也会随之改变,例如一个视图开始动画的位置是在(0,0)这个坐标,结束位置是在(50,100)这个坐标,如果是补间动画,那么结束后视图的实际位置还是在(0,0),而属性动画在动画结束后视图的位置则变化到(50,100)这个位置。

自从android3.0系统增加属性动画之后,在实际使用中属性动画应用最多,因为帧动画需要导入大量图片,加载和显示图片占用大量系统资源,不可能大量使用帧动画;而补间动画纯粹为了展示视图的动画而未改变视图的实际位置,在动画和手势交互较多的复杂情况下,可能出现一些显示问题。

2. 矢量图动画

在android 5.0系统后,新增VectorDrawable来支持矢量图(SVG),同时还引入AnimatedVectorDrawable来支持矢量图动画。

这些类的使用还是比较简单的(自己搜索),主要是对矢量图的理解。

二、实用的第三方动画库

简单的动画,使用android系统提供的属性动画就可以搞定。但是现实中有各种复杂的需求,为此大牛们开发了很多动画库,用来降低复杂动画的开发难度或加快开发速度。这里介绍两个比较有意思的开发库。

1. viewanimator

android本身提供了AnimatorSet这个类来支持几个连续或同时的动画,比如一个视图从(0,0)这个位置移动到(100,100),同时视图顺时针旋转90度。但是如果动画连续效果很多,代码量就会增加,显得代码很凌乱,代码不易读。viewanimator代码类似Rxjava的链式结构,动画过程一目了然,碰到页面里有多个视图需要动画并且有一系列连续动画时可以使用这个库。使用很简单只要在build.gradle里面导入:implementation 'com.github.florent37:viewanimator:1.0.5'(最后面的版本号有可能会更新)。

2. Lottie

你如果是程序员,我相信你一定会爱死这个库。这个库充分体现了一句话:每个人都做自己擅长的事。或许这是趋势吧,未来如果都往这个方向发展,程序员就可以将更多的精力关注在业务逻辑方面,而不是成天被UI这些东西搞得死去活来。按照传统的方法,一个动画效果,程序员从接到手到开发结束,往往都要被设计师扒一层皮,因为动画的过程需要程序员用代码来实现,动画效果往往很难一次性达到设计师的要求,所以调整、调整......永无止境的调整。有了Lottie这个库之后,动画效果是由设计师自己决定的,设计师使用AE等软件生成包含一套动画效果的.json文件,程序员只是将这个文件加载到app里面,用Lottie库提供的一个视图装一下,而且android和iOS可以共用一套动画效果(效果好不好,跟程序员一毛钱关系都没有,一定有程序员在偷笑)。至于这个库的使用方法网上很多,自己搜索一下。

想获取更多的android内容、教程或交流,可添加本人微信:1914532832,添加时请注明:android开发。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谈谈android的动画 的相关文章

  • onBeaconServiceConnect 未调用

    和以前一样 我使用 Android Beacon 库 它已经工作了 我可以通过 BLE 低功耗蓝牙找到信标 但是现在 更新到最新版本的库后 现在方法onBeaconServiceConnect 不再跑了 请告诉我我需要做什么才能让它发挥作用
  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • 如何强制 Eclipse 将 xml 布局和样式显示为文本?

    我最近升级到带有 ADT 20 0 3 的 Eclipse 4 2 Juno 如果我查看旧项目中的布局或样式 Eclipse 只会向我显示其适当的基于控件的编辑器 我想编辑语法突出显示的 xml 文本 我没有找到将插件的编辑器切换到此模式的
  • 在android中通过BLE传输图像

    我使用以下代码传输 1 MB 的图像 如果在每个数据包之间实现线程延迟 则图像将成功传输 如果未设置线程延迟 则所有数据包均从BluetoothGattServer 发送 但BluetoothGattCallback 不会接收所有数据包 任
  • FTS3 在 ORMLite 中搜索?

    我对 FTS3 一无所知 除了http developer android com guide topics search search dialog html http developer android com guide topics
  • 带有一、二和三个按钮的 Android 警报对话框

    我不经常发出警报 但每次发出警报时 我都会花一些时间来阅读文档 https developer android com guide topics ui dialogs html并弄清楚如何去做 由于我现在不得不这样做几次 所以我将在下面写一
  • 从 Android 代码设置的 SECRET_CODE

    我知道如何使用清单文件中的秘密代码 它与此源代码配合良好
  • Android 如何更改 OnTouchListener 上的按钮背景

    你好 我在 xml 中有一个按钮 我正在使用OnTouchListener在我的活动中获得button按下并释放 但问题是 当我按下按钮时背景颜色没有改变 当我延长可能的活动时OnClickListener背景正在改变 任何人都可以告诉我的
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 调试:在 Android 1.0 中找不到文件

    今天我更新到 Android Studio v 1 0 在尝试编译任何项目时出现以下错误 app build intermediates classes debug 找不到文件 问题是在更新之前我没有任何问题 这是我实际尝试编译的代码 构建
  • 出现错误错误:res/menu/mainMenu.xml:文件名无效:必须仅包含[a-z0-9_。]

    我是安卓新手 刚刚开始使用 我在 res 文件夹中创建了一个文件 menu mainMenu xml 但我得到了错误 Error res menu mainMenu xml invalid file name must contain on
  • android EditText 输入类型用于 StreetNumber 字段

    我试图在地址对话框的 streetNumber 字段中选择正确的 inputType 我想先显示数字键盘 然后让用户输入字母字符 对于一些非常特殊的情况 更接近这个的是 inputType datetime 但这不允许输入字母字符 那么如何
  • 放置在 NavigationDrawer 顶部的片段

    我正在尝试添加一个PreferenceFragment在我的应用程序中 问题是 它自动放置在我的顶部NavigationDrawer public class SetPreferenceActivity extends Activity O
  • 如何在 Android 模块中使用 FirebaseAuth

    我正在开发一个聊天库 我想在其中显示登录用户的对话 制作该库的原因是我想将其集成到多个项目中 我现在面临的问题是FirebaseAuth表示用户尚未登录 FirebaseAuth getInstance mFirebaseApp getCu
  • 获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度

    我知道如何使用 getOrientation 方法获取手机 y 轴和磁北之间的方向角 如此处所述https developer android com guide topics sensors sensors position https
  • 使用 PhoneGap 使 Android 应用程序易于访问(对于残障人士)

    有人有过使用 PhoneGap 使 Android 应用程序可访问的经验吗 至少我们需要使我们的应用程序符合第 508 条规定 我尝试实现一些标准的辅助功能 文本框标签 向 div 添加标题属性等 但是 当在 Android 中使用 Tal
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • Android:监听状态栏通知

    有没有办法在状态栏被下拉时监听通知 1 用于检测状态栏变化 您可以注册一个监听器来获取系统UI可见性变化的通知 因此 要在您的活动中注册侦听器 Detecting if the user swipe from the top down to
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • 使用 JobScheduler API 进行位置更新

    下面是我使用 FireBaseJobDispatcher 启动作业的演示代码 public class MainActivity extends AppCompatActivity Override protected void onCre

随机推荐

  • ubuntu 第一次SU密码

    Ubuntu刚安装后 xff0c 不能在terminal中运行su命令 xff0c 因为root没有默认密码 xff0c 需要手动设定 以安装ubuntu时输入的用户名登陆 xff0c 该用户在admin组中 xff0c 有权限给root设
  • Android开发——自动连接指定SSID的wifi热点(不加密/加密)

    最近在做一个项目 xff0c 其中涉及到一块 自动连接已存在的wifi热点 的功能 xff0c 在网上查阅了大量资料 xff0c 五花八门 xff0c 但其中一些说的很简单 xff0c 即不能实现傻瓜式的拿来就用 xff0c 有些说的很详细
  • iOS开发:开发者账号申请后真机调试详细步骤

    前提 xff1a 已经成功申请了iOS开发者账号 环境 xff1a xcode 4 6 1 xff1b iOS 6 1 2 1 授权设备 xff1a 进入Apple Developer会员中心 xff0c 点击图中的iOS Provisio
  • Python个人学习记录

    Python个人学习记录 一 输出 xff08 print 函数 xff09 1 控制台输出2 将内容输出到文件中3 不进行换行输出 xff08 输出内容在一行当中 xff09 二 转义字符1 普通转义字符2 特殊用途的字符 xff08 反
  • 解决ERROR 1064 (42000): You have an error in your SQL syntax..

    在MySQL命令行使用sql语句进行建表或者查询表时 xff0c MySQL 报错 例如 xff1a 在下面的数据库中查看like表 当我们输入sql语句进行查询时 xff0c 发现会报错 其实这个问题是语法上的错误 xff0c 在MySQ
  • Onedrive不限速还有5T空间,且行且珍惜

    由于百度网盘的限速 xff0c 不得已开始捣鼓微软的OneDrive网盘 相对于百度网盘 xff0c Onedrive最大的优势是不限速 xff0c 速度也是难得的友好 相对于百度网盘 xff0c Onedrive最大的劣势是空间大小 xf
  • iOS图片的填充方式UIImageView(contentMode)有什么不同

    UIViewContentModeScaleAspectFit 这个图片都会在view里面显示 xff0c 并且比例不变 这就是说 如果图片和view的比例不一样 就会有留白如下图1 图1 UIViewContentModeScaleAsp
  • windows 下包管理工具vcpkg安装

    主要参考博文 xff1a vcpkg安装及使用 我叫电池的博客 CSDN博客 vcpkg安装 由于需要在离线环境下面搭建开发环境 xff0c 所有的包只能离线安装了 xff0c 包括这个管理工具vcpkg的安装 xff0c 也必须是离线安装
  • 【Python】如何发布编写好的Python应用程序之Python Release for Windows(附踩坑经验)

    运筹优化博士 xff0c 只做原创博文 更多关于运筹学 xff0c 优化理论 xff0c 数据科学领域的内容 xff0c 欢迎关注我的知乎账号 xff1a https www zhihu com people wen yu zhi 37 最
  • ubuntu 下更改docker的默认位置

    首先查看docker位置 xff1a docker info 原先的位置默认应该都在 var lib docker 停止docker服务 systemctl stop docker 查看量大容的位置 xff0c 然后在上面创建转移目录文件夹
  • 编译 NDK 编译 freerdp 转载:测试成功

    最近著名的开源rdp客户端freerdp的android版本终于出来了 xff0c 经过9个月的跳票终于release了第一版 下面简单说说编译的过程 这个是需要用到cmake来编译 xff0c 所以系统推荐用ubuntu或者mac xff
  • 1.VMWare-Ubuntu-内存不足处理办法 2.VMWare-Ubuntu-扩展内存后黑屏解决办法

    问题描述 xff1a 1 VMWare Ubuntu 内存不足 2 VMWare Ubuntu 扩展内存后黑屏 解决办法 xff1a 详情参考文章https www cnblogs com codingdog p 14879313 html
  • Linux目录解释

    bin bin是binary 二进制 的缩写 这个目录是对UNIX系统习惯的沿袭 xff0c 存放着使用者最经常使用的命令 例如 xff1a cp ls cat boot 这里存放的是启动LINUX时使用的一些核心文件 dev dev是de
  • 数据库的插入更新语句

    目的 xff1a 实现在数据库插入数据的时候 xff0c 只对重复的数据进行更新 xff1b 实现方式 xff1a 1 在表中建立一个唯一索引 xff0c 主键 xff08 已有唯一索引的特性 xff09 2 在插入数据 sql语句 xff
  • Linux安装Yapi

    需求 xff1a 按公司需求 xff0c 前后端开发 xff0c 由于过往开发都是后端先进行 xff0c 前端须等后端开发玩接口 xff0c 依照开发文档才能进行接口调试 xff0c 大大增加了项目时间 xff0c 故采用YAPI来作为解决
  • mysql8.0 安装 修改密码 允许远程连接

    mysql从5 7一下子跳跃到了8 0 xff0c 其中的改变还是很大 xff0c 有点这里就不说了 xff0c 小伙伴们自己去百度了解一下 xff0c 这里重点说一下 xff0c 安装的事 1 解压后 xff0c 文件下下面是没有my i
  • IOS开发入门之二——第一个App

    如果你对怎么开始IOS开发都不懂的话 xff0c 请看点下面的链接 xff0c 先学习关于IOS开发环境的配置以及Swift语言入门 xff1a IOS开发入门之一 Swift语言基础 本章将教大家创建一个标准的苹果手机应用并让它在手机模拟
  • IOS开发入门之五——storyboard的使用(上)

    需要iOS开发视频资料可以加我微信 1914532832 验证信息请注明 xff1a IOS开发 上节介绍了纯代码开发 xff0c 就是所有页面全部用代码来写 xff0c 纯代码开发缺点就是比较慢的 xff0c 而且很不直观 xff0c 需
  • UILabel文字内容自动换行

    UILabel视图其实是可以显示多行文本的 xff0c 但是如果不做设置 xff0c UILabel默认是显示一行的 xff0c 并且如果文字内容太多 xff0c 超过屏幕的部分就显示不出来了 其实UILabel设置多行文本很简单 xff0
  • 谈谈android的动画

    android动画为app提供更丰富 更绚丽的视觉效果 xff0c 因此app或多或少都会添加动画效果 在此总结一下 xff0c 本人android开发过程中 xff0c 有关动画的内容 一 android动画种类和区别 android动画