博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android动画-补间动画与Activity转场动画
阅读量:4100 次
发布时间:2019-05-25

本文共 5407 字,大约阅读时间需要 18 分钟。

Android动画

补间动画

Tween (补间)动画可以在一个视图容器内执行一系列简单变换(位置、大小、旋转、透明度)。 譬如,如果你有一个 TextView 对象,您可以让这个TextView移动、旋转、缩放、透明度,当然,如果它有一个背景图像,背景图像会随着文本变化。

补间动画通过 XML 或 Android 代码定义,建议使用 XML 文件定义,因为它更具可读性、可重用性。

补间动画相关:

类名 xml关键字 描述信息
AlphaAnimation <alpha> 渐变透明度
RotateAnimation <rotate> 旋转
ScaleAnimation <scale> 渐变缩放
TranslateAnimation <translate> 平移
AnimationSet <set> 动画集合

动画属性

xml 属性 描述
android:detachWallpaper 是否在壁纸上运行
android:duration 动画持续时间,毫秒为单位
android:fillAfter 控件动画结束时是否保持动画最后的状态
android:fillBefore 控件动画结束时是否还原到开始动画前的状态
android:fillEnabled 与android:fillBefore效果相同
android:interpolator 设定插值器(指定的动画效果,譬如回弹等)
android:repeatCount 重复次数
android:repeatMode 重复类型:reverse表示倒序回放,restart表示从头播放
android:startOffset 调用start函数之后等待开始运行的时间,单位为毫秒
android:zAdjustment 表示被设置动画的内容运行时在Z轴上的位置(top/bottom/normal),默认为normal

Alpha属性

xml属性 描述
android:fromAlpha 动画开始的透明度(0.0到1.0,0.0是全透明,1.0是不透明)
android:toAlpha 动画结束时的透明度

Rotate 属性

xml 属性 描述
android:fromDegrees 旋转开始角度,正代表顺时针度数,负代表逆时针度数
android:toDegrees 旋转结束角度,其它同上
android:pivotX 缩放起点X坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点)
android:pivotY 缩放起点Y坐标,其它同上

Scale 属性

xml 属性 描述
android:fromXScale 初始化X轴缩放比例,1.0表示无变化
android:toXScale 结束X轴缩放比例 1.0-0.0
android:fromYScale 初始化Y轴缩放比例
android:toYScale 结束Y轴缩放比例
android:pivotX 缩放起点X轴坐标,同旋转
android:pivotY 缩放起点Y轴坐标,同上

Translate 属性

xml 属性 描述
android:fromXDelta 起始点X轴坐标,同旋转
android:fromYDelta 起始点Y轴坐标 ,同上
android:toXDelta 结束点X轴坐标 ,同上
android:toYDelta 结束点Y轴坐标 ,同上

相关代码 == 动画集合形式

...
//使用ImageView Image = (ImageView) findViewById(R.id.ipImage);Animation JumpAnimation = AnimationUtils.loadAnimation(this, R.anim.space_jump);Image.startAnimation(JumpAnimation);

视图动画插值器 Interpolator

使用:

...

系统自带的插值器:

在这里插入图片描述
自定义插值器:

关于插值器的属性:

<accelerateInterpolator> android:factor 浮点数,加速速率 默认为1
<anticipateInterploator>android:tension 浮点数,起始点后拉的张力数(默认值为2)
<cycleInterplolator>android:cycles 整形,循环的个数(默认为1)。
<decelerateInterpolator>android:factor 浮点数,减速的速率(默认为1)。
<overshootInterpolator>
android:tension 浮点值,超出终点后的张力(默认为2)。

//一个动画始末速率较慢、中间加速的 AccelerateDecelerateInterpolator 插值器public class AccelerateDecelerateInterpolator extends BaseInterpolator        implements NativeInterpolatorFactory {
...... public float getInterpolation(float input) {
return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f; } ......}

Ripple Effect / Touch Feedback / 触摸反馈动画

材料设计中的触摸反馈在用户和UI元素交互的点提供瞬时视觉确认。例如,当按钮被触摸时显示一个水波纹效果。 这是 Android 5.0 默认的触摸反馈动画。水波纹动画通过新的 RippleDrawable 类实现。水波纹效果可以配置在 View 边界的末端或超出 View 的边界。

//有边界?android:attr/selectableItemBackground//无边界 (要求API21以上)?android:attr/selectableItemBackgroundBorderless

使用时只需要把上面这两个值作为 View 的 android:background="" 或 android:foreground="" 即可(如果已经有背景, 可以设置到前景属性中)。同时如果想要效果显示出来要保证 View 是可点击的(比如控件本身可点击、或者给控件设置点击事件、 或给控件设置 android:clickable=“true”)。

自定义 Ripple

自定义Ripple和shape结合,控制水波纹扩散的图形

自定义Ripple和selector结合,水波纹和按钮转态切换

Activity转场动画-overridePendingTransition(0, 0)

overridePendingTransition(0, 0);用来指定Activity之间的切换动画

Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画。
它包括两个部分
一部分是第一个参数是activity退出时的动画;
另外一部分时第二个参数是activity进入时的动画;
在这里插入图片描述

在Android的2.0版本之后,有了一个函数来帮我们实现这个动画。这个函数就是overridePendingTransition

这个函数有两个参数,一个参数是MainActivity2.class进入时的动画,另外一个参数则是ShowUiActivity.this退出时的动画。
这里需要特别说明的是,关于overridePendingTransition这个函数,有两点需要主意
1.它必需紧挨着startActivity()或者finish()函数之后调用”
2.它只在android2.0以及以上版本上适用
API 21之前Activity过渡动画使用:
style文件主题里面统一定义,全局为所有Activity设置过渡动画效果。

@style/Animation.Activity.Customer
Intent intent = new Intent(ShowUiActivity.this,MainActivity2.class);                startActivity(intent);                overridePendingTransition(R.anim.cat_in,R.anim.cat_out);                //overridePendingTransition(0, 0);

API 21(5.0)后系统内置了Activity之间的切换动画,满足我们日常开发的需求,但是意味着这些动画只适用于5.0之后的系统(兼容);

关于内置Activity之间切换动画如何使用

Activity之间的切换动画,对于任意一个Activity来说,无非就是“进入”和“退出”两种情景下的动画。而“进入”分为“第一次进入Activity”和“返回当前Activity”这两种情况。另外系统还提供了一种动画,即共享元素,这是让两个Activity中的View有个过渡切换的效果。执行动画的状态如下所示:

在这里插入图片描述

Transitionz过渡动画的使用也是有前提的: API

21以上。当然你也可以不使用ActivityOptions,而是使用兼容类ActivityOptionsCompat来替换ActivityOptions。(兼容类给到我们的作用是保证程序在低版本运行不会挂掉,但是不能保证低版本也能起到响应的效果的)
必须允许Activity可以使用Transition,要么在style里面设置(true),要么直接通过代码设置(getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS)😉。

enter:用于决定第一次打开当前Activity时的动画

exit : 用于决定退出当前Activity时的动画
reenter: 用于决定如果当前Activity已经打开过,并且再次打开该Activity时的动画
shared elements:用于决定在两个Activity之间切换时,指定两个Activity中对应的View的过渡效果

三种动画效果:transition:Explode(爆炸分解),Slide(滑动),Fade(淡入淡出).
而你需要做的,首先对Activity的ThemeStyle添加windowContentTransitions属性:
//退出时使用            getWindow().setExitTransition(explode);            //第一次进入时使用            getWindow().setEnterTransition(explode);            //再次进入时使用            getWindow().setReenterTransition(explode);

**我们有两种方式来定义过渡动画:资源文件的方式、代码的方式。

**

该xml定义了一个slide过渡动画,除了状态栏、导航栏以外其他所有的View进行滑入滑出动画效果。 android:slideEdge=”top” 设置滑动的方向

元素共享动画 和场景动画

参考链接:

  • https://blog.csdn.net/wuyuxing24/article/details/78857912
  • https://github.com/Trisaa/MaterialTranstion
  • https://github.com/OCNYang/Android-Animation-Set/blob/master/view-animation/ViewAnimationUseTips.md
你可能感兴趣的文章
算法入门--STL(标准模板库),#include <algorithm>(待更新)
查看>>
python 学习的相关概念
查看>>
flask实现同时使用用户名/邮箱其一进行登录
查看>>
Leetcode-Python 1 .Two Sum/ 7. Reverse Integer
查看>>
消息队列 知识点
查看>>
unicode 在python3中的编码问题
查看>>
InstantMessaging(即时通讯,实时传讯)
查看>>
数据仓库/数据集合
查看>>
帧同步
查看>>
HTTP 知识点
查看>>
Python原理知识
查看>>
Database知识点
查看>>
机器学习算法分析
查看>>
装饰器
查看>>
在CentOS-7.0中安装Python3.6.2
查看>>
普林斯顿Algorithms(上)学习笔记(3)
查看>>
普林斯顿Algorithms(上)学习笔记(4)
查看>>
普林斯顿Algorithms(上)学习笔记(5)
查看>>
纯js生成csv文件并导出
查看>>
[多易教育]《综合项目:模块1--数仓系统》视频更新到2.0版
查看>>