本文共 5407 字,大约阅读时间需要 18 分钟。
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 |
xml属性 | 描述 |
---|---|
android:fromAlpha | 动画开始的透明度(0.0到1.0,0.0是全透明,1.0是不透明) |
android:toAlpha | 动画结束时的透明度 |
xml 属性 | 描述 |
---|---|
android:fromDegrees | 旋转开始角度,正代表顺时针度数,负代表逆时针度数 |
android:toDegrees | 旋转结束角度,其它同上 |
android:pivotX | 缩放起点X坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点) |
android:pivotY | 缩放起点Y坐标,其它同上 |
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轴坐标,同上 |
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);
使用:
...
系统自带的插值器:
自定义插值器:关于插值器的属性:
<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; } ......}
材料设计中的触摸反馈在用户和UI元素交互的点提供瞬时视觉确认。例如,当按钮被触摸时显示一个水波纹效果。 这是 Android 5.0 默认的触摸反馈动画。水波纹动画通过新的 RippleDrawable 类实现。水波纹效果可以配置在 View 边界的末端或超出 View 的边界。
//有边界?android:attr/selectableItemBackground//无边界 (要求API21以上)?android:attr/selectableItemBackgroundBorderless
使用时只需要把上面这两个值作为 View 的 android:background="" 或 android:foreground="" 即可(如果已经有背景, 可以设置到前景属性中)。同时如果想要效果显示出来要保证 View 是可点击的(比如控件本身可点击、或者给控件设置点击事件、 或给控件设置 android:clickable=“true”)。
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中的View有个过渡切换的效果。执行动画的状态如下所示:
21以上。当然你也可以不使用ActivityOptions,而是使用兼容类ActivityOptionsCompat来替换ActivityOptions。(兼容类给到我们的作用是保证程序在低版本运行不会挂掉,但是不能保证低版本也能起到响应的效果的) 必须允许Activity可以使用Transition,要么在style里面设置(true),要么直接通过代码设置(getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS)😉。
Transitionz过渡动画的使用也是有前提的: API
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” 设置滑动的方向
参考链接: