Android 属性动画及自定义3D旋转动画

Android 动画框架

其中包括,帧动画、视图动画(补间动画)、属性动画。

在Android3.0之前,视图动画一家独大,之后属性动画框架被推出。属性动画框架,基本可以实现所有的视图动画效果。

视图动画的效率较高且使用方便。但是相比属性动画,视图动画一个非常大的缺陷就是不具备交互性。当某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互发生。

书接上篇:Android 动画之视图动画的使用


Animator 属性动画

其拥有ObjectAnimator单个动画和AnimatorSet动画集两个类。

使用 ObjectAnimator 可以控制单个View的某个属性值的变化,而将多个 ObjectAnimator 组合到一起就可以形成一个 AnimatorSet 动画集合。

ObjectAnimator

ObjectAnimator可以调用 setFrameDelay(longframeDelay) 设置动画帧之间的间隙时间,通过调整帧率的方式减少动画过程中频繁绘制界面。从而在不影响动画效果的前提下减少CPU资源消耗。

最重要的是,属性动画通过属性的get、set方法来真实地控制一个View的属性值。使用方法如下:

  • translationX和translationY:控制着View从布局容器的左上角坐标偏移的位置;
ObjectAnimator animator=ObjectAnimator.ofFloat(view,"translationX",300);
animator.setDuration(300);
animator.start();
  • pivotX 和 privotY:控制着View的支点位置,默认支点为View的中心; 
  • rorationX 和 rorationY :控制View围绕支点进行2D和3D旋转;
  • scaleX 和 scaleY:控制着View围绕它的支点进行2D缩放;
  • alpha:控制View的alpha透明度。默认值1不透明,0完全透明。

监听事件

ObjectAnimator anima =ObjectAnimator.ofFloat(View,"alpha",0.5f);
anima.addListener(new AnimatorListener(){@Overriderpublic void onAnimationStart(Animator animation){//开始}@Overriderpublic void onAnimationRepeat(Animator animation){ //重复}@Overriderpublic void onAnimationEnd(Animator animation){//结束 }@Overriderpublic void onAnimationCancel(Animator animation){ //取消 }
});
anima.start();

也可以进行选择,单个事件进行监听:

anima.addListener(new AnimatorListenerAdapter(){@Overridepublic void onAnimationEnd(Animator animation){//结束}
});

AnimatorSet

AnimatoSet 可以通过 playTogether()、playSequentially()、animSet.play().with()、before()、after(),来控制多个动画的协同工作方式,从而做到对动画播放顺序的控制。

ObjectAnimator animator1 =ObjecteAnimator.ofFloat(view,"translation",300f);
ObjectAnimator animator1 =ObjecteAnimator.ofFloat(view,"scaleX",1);
ObjectAnimator animator1 =ObjecteAnimator.ofFloat(view,"scaleY",1);
AnimatorSet set=new AnimatorSet();
set.setDuration(1000);
set.playTogether(animator1,animator2,animator3);//同时播放动画
set.start();

自定义动画

通过继承Animation类,重写其动画的方法实现。

其中一个关键方法如下:

applyTransformation(float interpolatedTime ,transformation t)
  • interpolatedTime:插值器的时间因子,取值范围为0~1 之间;
  • transformation :矩阵封装类,使用它获取矩阵对象getMatrix();

案例,模拟电视机关闭效果的动画来初步了解自定义动画。代码实现如下:

/*** Created by aiyang on 2018/5/28.*/
public class CustomTV extends Animation {private int mCenterWidth;private int mCenterHeight;private Camera camera=new Camera();@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight) {super.initialize(width, height, parentWidth, parentHeight);setDuration(2000);setFillAfter(false);setRepeatCount(3);setInterpolator(new AccelerateInterpolator());//缩放的中心位置mCenterWidth = width/2;mCenterHeight = height/2;}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {final Matrix matrix=t.getMatrix();//让一个图像纵向比例不断缩小就能实现电视机关闭的效果matrix.preScale(1,1-interpolatedTime,mCenterWidth,mCenterHeight);}
}

自定义3D动画

结合矩阵Matrix,并使用 Camera 类可以实现一个自定义的3D动画效果。

这里的Camera并非系统相机类,而是指的是android.graphics.Camera 中的 Camera 类,它封装了openGL的3D动画,从而可以非常方便的创建3D动画效果。

接上面的代码进行修改,如下:

/*** Created by aiyang on 2018/5/28.*/
public class CustomAnim extends Animation {private int mCenterWidth;private int mCenterHeight;private Camera mCamera = new Camera();private float mRotateY = 0.0f;@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight) {super.initialize(width, height, parentWidth, parentHeight);setDuration(3000);setFillAfter(true);setRepeatCount(3);setInterpolator(new BounceInterpolator());mCenterWidth = width / 2;mCenterHeight = height / 2;}//暴露接口,设置旋转角度public void setRotateY(float rotateY){mRotateY=rotateY;}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {final Matrix matrix=t.getMatrix();mCamera.save();//使用Camera设置旋转的角度mCamera.rotateY(mRotateY*interpolatedTime);//将旋转变换作用到Matrix上mCamera.getMatrix(matrix);mCamera.restore();//通过pre方法设置矩阵作用前的偏移量来改变旋转中心matrix.preTranslate(mCenterWidth,mCenterHeight);matrix.postTranslate(-mCenterWidth,-mCenterHeight);}
}

代码调用

 CustomAnim anim = new CustomAnim();anim.setRotateY(10);textView.setText("推开门");textView.startAnimation(anim);

当然,根据对属性动画的知识学习,我们知道属性动画可以支持3D旋转:

即rorationX 和 rorationY :控制View围绕支点进行2D和3D旋转;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/303432.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新品攻略—小功率、小体积、高效率!LED驱动模块RSC6218A

瑞森半导体(REASUNOS)推出应用在5W-18W LED电源上的LED驱动模块RSC6218A。 LED驱动模块RSC6218A是一款LLC 谐振拓扑功率模块,带有半桥驱动的控制电路和功率转化器件,适用于 LED 恒流控制线路,电路工作频率可达200KHz。…

MicroPython with LVGL

官方博客:Micropython LittlevGL | LVGL’s Blog github:GitHub - lvgl/lv_micropython: Micropython bindings to LVGL for Embedded devices, Unix and JavaScript 官方在线模拟器:https://sim.lvgl.io/(需要电脑能访问外网才能使用) 电脑不能访问外网会出现以下错误&…

GlusterFS分布式存储

目录 前言 一、GlusterFS分布式存储概述 1、GFS概念 2、GFS特点 3、GFS术语 4、GFS构成 5、GFS工作流程 6、后端存储如何定位文件 7、GlusterFs的卷类型 7.1 Distributed Volume(分布式卷) 7.2 Striped Volume(条带卷&#xff09…

vue通过echarts实现数据可视化

1、安装echarts cnpm install echarts -Sechart官方图表示例大全&#xff1a;https://echarts.apache.org/examples/zh/index.html#chart-type-line 2、代码实现 <template><div><div class"box" ref"zhu"></div><div class&…

无线游戏手柄的测试(Windows11系统手柄调试方法)

实物 1、把游戏手柄的无线接收器插入到电脑usb接口中 2、【控制面板】----【查看设备和打印机】 3、【蓝牙和其它设备】--【更多设备和打印机设置】 4、鼠标右键【游戏控制器设置】 5、【属性】 6、【测试】&#xff08;每个按键是否正常&#xff09; 7、【校准】&#xff08;…

NLP在搜索召回领域中的应用场景

自然语言处理&#xff08;NLP&#xff09;在搜索召回领域中的应用场景非常广泛&#xff0c;它通过理解和分析人类语言&#xff0c;提高了信息检索的准确性和效率。以下是一些具体的应用场景&#xff1a; 1. 搜索引擎优化 NLP技术可以用于优化搜索引擎的查询处理&#xff0c;通…

顺序表(增删减改)+通讯录项目(数据结构)

什么是顺序表 顺序表和数组的区别 顺序表本质就是数组 结构体初阶进阶 系统化的学习-CSDN博客 简单解释一下&#xff0c;就像大家去吃饭&#xff0c;然后左边是苍蝇馆子&#xff0c;右边是修饰过的苍蝇馆子&#xff0c;但是那个好看的苍蝇馆子一看&#xff0c;这不行啊&a…

【技术干货】集成电路之模拟芯片中的电源管理

在日常生活中&#xff0c;人们对电子设备的依赖越来越严重&#xff0c;电子技术的更新换代&#xff0c;同时意味着人们对电源技术的发展寄予厚望&#xff0c;今天就带大家认识一下电源管理芯片。 随着整个电子产业链的芯片短缺以及我国5G商用的推进&#xff0c;国产化趋势日益增…

网络学习学习笔记

NETEBASE学习笔记 一.VRP系统1.四种视图模式2.基础命令 二.TCP/IP1.五层模型 一.VRP系统 1.四种视图模式 (1)< Huawei > 用户视图 【查看运行状态】 (2)[Huawei] 系统视图 【配置设备的系统参数】 system-view /sys 进入系统视图 CtrlZ/return 直接返回用户视图 (3)[Hua…

Python+Django+Html河道垃圾识别网页系统

程序示例精选 PythonDjangoHtml河道垃圾识别网页系统 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjangoHtml河道垃圾识别网页系统》编写代码&#xff0c;代码整洁&#xff0c;规…

视帝餐厅生意亮红灯?50岁前TVB「电波少女」帮衬撑留港消费

现年50岁的前「电波少女」成员姚乐怡&#xff0c;2012年与商人吴俊匡结婚&#xff0c;2015年诞下一女吴芊憧&#xff08;Gaibe、乳名小鸡髀&#xff09;后淡出幕前&#xff0c;今积极拍片转型做「美食网红」。近年不时介绍香港地道美食&#xff0c;近日更以行动支持留港消费&am…

113.PyQt5_QtPrintSupport_打印操作

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

docker搭建EFK

目录 elasticsearch1.创建网络2.拉取镜像3.创建容器如果出现启动失败&#xff0c;提示目录挂载失败&#xff0c;可以考虑如下措施 开放防火墙端口4.验证安装成功重置es密码关闭https连接创建kibana用户创建新账户给账户授权 kibana1.创建容器2.验证安装成功3.es为kibana创建用户…

ZYNQ之嵌入式开发02——LED实验

文章目录 通过GPIO控制LED状态通过按键控制LED状态通过EMIO复用PL端按键控制PS端LED状态通过EMIO复用多个PL端的GPIO GPIO(General Purpose Input Output)是一个外设&#xff0c;用来对器件的引脚做观测(输入)和控制(输出)。每个GPIO口都是独立且可以进行动态的编程的&#xff…

mybatis-plus与mybatis同时使用别名问题

在整合mybatis和mybatis-plus的时候发现一个小坑&#xff0c;单独使用mybatis&#xff0c;配置别名如下&#xff1a; #配置映射文件中指定的实体类的别名 mybatis.type-aliases-packagecom.jk.entity XML映射文件如下&#xff1a; <update id"update" paramete…

X服务器远程连接问题解决:Bad displayname ““‘或Missing X server or $DISPLAY

X服务器远程连接问题 报错1 ImportError: this platform is not supported: (failed to acquire X connection: Bad displayname "", DisplayNameError()) Try one of the following resolutions: * Please make surethat you have an X server running, and that …

Vue2 —— 学习(四)

一、收集表单数据 &#xff08;一&#xff09;介绍 前面其实已经 学过了 v-model 双向绑定事件&#xff0c;能获取到表单中的内容到 vm 实例对象中 但是前面只是收集文本框&#xff0c;下面学习一下 各种类型表单数据收集 &#xff08;单/多 选&#xff0c;下拉框&#xff0…

第十届蓝桥杯大赛个人赛省赛(软件类) CC++ 研究生组-RSA解密

先把p&#xff0c;q求出来 #include<iostream> #include<cmath> using namespace std; typedef long long ll; int main(){ll n 1001733993063167141LL, sqr sqrt(n);for(ll i 2; i < sqr; i){if(n % i 0){printf("%lld ", i);if(i * i ! n) pri…

Linux_应用篇(03) 文件 I/O 加强

经过上一章内容的学习&#xff0c;相信各位读者对 Linux 系统应用编程中的基础文件 I/O 操作有了一定的认识和理解了&#xff0c;能够独立完成一些简单地文件 I/O 编程问题&#xff0c; 如果你的工作中仅仅只是涉及到一些简单文件读写操作相关的问题&#xff0c;其实上一章的知…

玩转儿童数码摄影,儿童人像摄影指南

一、资料前言 本套儿童人像摄影&#xff0c;大小250.91M&#xff0c;共有8个文件。 二、资料目录 《爱孩子爱摄影》.pdf 《六招拍儿童》.pdf 《数码摄影工坊-儿童摄影》.pdf 《专业儿童人像摄影指南》.pdf 宝贝看镜头.pdf 儿童摄影手册.pdf 儿童摄影艺术.pdf 玩转儿童…