Android中的动画
动画 介绍
动画分为两类:
1.传统动画
* 帧动画:Frame Animation
* 补间动画:Tweened Animation
2.属性动画 ViewPropertyAnimator
动画种类
1.帧动画 Frame Animation
2.补间动画 Tweened Animation
3.属性动画 ViewPropertyAnimator 和 ObjectAnimator
三种动画的区别?
动画也可以分为这两类:
* Animation 动画(单纯的动画)
* View Animation// 视图动画,纯粹基于 framework 的绘制转变,比较简单
* 帧动画 Frame Animation
* 补间动画 Tweened Animation
* Property Animation// 属性动画,Android 3.0 的动画形式,
* Transition 过度动画(切换界面时的动画效果,它的重点是在于切换而不是动画)
知识拓展
属性动画 看这里:https://juejin.cn/post/7218080360402812988
Android3.0(api11)时代诞生的那些用来做动画的方法
View类在Android3.0(api11)时代诞生的那些用来做动画的方法
setTranslationX();// 设置X轴的偏移
setTranslationY();// 设置Y轴的偏移
setTranslationZ();// 设置Z轴的偏移
setX();// 设置X轴绝对位置
setY();// 设置Y轴绝对位置
setZ();// 设置Z轴绝对位置
setRotation(); // 设置平面旋转
setRotationX();// 设置沿X轴旋转
setRotationY();// 设置沿Y轴旋转
setScaleX();// 设置横向缩放
setScaleY();// 设置纵向缩放
setAlpha(); // 设置透明度
注意:view的位置变了,点击事件的位置也变了。
View 提供的animate()方法获取 ViewPropertyAnimator 对象,
ViewPropertyAnimator 对象提供的动画方法如下:
view.animate().translationX(100);// 设置X轴的偏移
view.animate().translationY(100);// 设置Y轴的偏移
view.animate().translationZ(100);// 设置Z轴的偏移
view.animate().rotation(100); // 设置平面旋转
view.animate().rotationX(100);// 设置沿X轴旋转
view.animate().rotationY(100);// 设置沿Y轴旋转
view.animate().scaleX(100);// 设置横向缩放
view.animate().scaleY(100);// 设置纵向缩放
view.animate().alpha(1); // 设置透明度
view.animate().setInterpolator(new LinearInterpolator());// 设置速度模型
view.animate().setDuration(500);// 设置动画时间
链式调用:
mImageView.animate()
.translationX(100)// 设置X轴的偏移
.translationY(100)// 设置Y轴的偏移
.translationZ(100)// 设置Z轴的偏移
.rotation(100) // 设置平面旋转
.rotationX(100)// 设置沿X轴旋转
.rotationY(100)// 设置沿Y轴旋转
.scaleX(100)// 设置横向缩放
.scaleY(100)// 设置纵向缩放
.alpha(1) // 设置透明度
.setInterpolator(new LinearInterpolator())// 设置速度模型
.setDuration(500);// 设置动画时间
注意:view的位置变了,点击事件的位置也变了。
速度模型:Interpolator 插值器/内插器
概念:根据时间完成度去计算动画完成度;
理解:从A点到B点,是匀速过去的还是加速过去的,过去的过程;
方法:.setInterpolator(new LinearInterpolator())// 设置速度模型
系统提供的速度模型:
* LinearInterpolator();// 线性速度模型(匀速)
* // 减速模型
* new AccelerateDecelerateInterpolator();// 先加速再减速模型
动画 代码演示
属性动画的使用方法1:
正常情况下,我们需要一个view向右移动400像素,会调用以下代码:
ivImg.animate().translationX(400);// 每个10毫秒会调用一下translationX,向左移动400像素。
view通过调用animate()方法获得一个 ViewPropertyAnimator 对象;
在调用 ViewPropertyAnimator 对象的translationX()方法向右移动400像素;
* ivImg.animate();// 返回了一个 ViewPropertyAnimator 对象(View类中维护了一个 ViewPropertyAnimator 对象,如果为空,就new一个返回给view,如果不为空,直接返回给view);
* translationX(400);//