Android_Animation动画

来源:互联网 发布:java求最大公约数 编辑:程序博客网 时间:2024/05/17 21:47

Animation动画

位移、翻转、透明、缩放

共有方法:
1、setRepeatMode();设置重复模式
常用:

Animation.RESTART 每次从头开始Animation.REVERSE 反复开始

2、setRepeatCount();设置重复次数
3、setDuration(3000);设置动画执行的时间(单位:毫秒)
4、view.startAnimation(具体对象) 开始动画
5、setFillAfter(true); 动画执行完之后是否保留最终状态
6、setFillBefore(false); 动画执行完之后是否恢复执行前状态
7、setStartOffset(500);设置延时启动

①、透明:AlphaAnimation
1、new AlphaAnimation(from, to) 1:完全不透明,0完全透明
这里写图片描述
2、 或者:res的anim文件夹中:

<alpha android:fromAlpha="1" android:toAlpha="1" android:duration="3000" android:repeatCount="1" android:repeatMode="reverse"/> 

通过AnimationUtils.loadAnimation(resId);在Activity引用

②、旋转:RotateAnimation

newRotateAnimation(fromDegrees,toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue); 

参数1:fromDegrees:旋转起始角度
参数2:toDegrees:旋转结束角度 以下4个参数用来设置旋转圆心:
参数3:pivotXType:旋转类型,表示以哪个位置为旋转的基点横坐标。
共有3个:
Animation.ABSOLUTE,一个绝对像素值
Animation.RELATIVE_TO_SELF 计算距离时看的是自己的宽高
Animation.RELATIVE_TO_PARENT.计算距离时看的是其父控件的宽高
参数4:pivotXValue:
0-1f之间的一个float值,表示实际旋转时圆心相对基点的水平偏移量,0表示不偏移,0.5f是半个控件长度 ,1表示偏移当前控件宽度
参数5:pivotYType: 同参数3.
参数6:pivotYValue 同参数4
实现:

这里写图片描述
③、缩放:ScaleAnimation
new ScaleAnimation(fromX, toX, fromY, toY)
1到0的float值,表示起始结束大小
也可以1到
1代表当前大小,小于1代表缩小的倍数,大于1代表放大的倍数

new ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue)意义同旋转。。。
实现:

这里写代码片

④、位移:TranslateAnimation

new TranslateAnimation(fromX, toX, fromY, toY)

1到0的float值,表示起始横纵坐标

new TranslateAnimation( fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue);

意义同旋转。。。

<translateandroid:duration="1000"android:fromXDelta="-100%"android:toXDelta="0"/>

实现:
这里写图片描述
注意:起始的0,0值得是控件当前位置,不仅仅时屏幕的左上角

⑤、AnimationSet 动画集合
AnimationSet 动画集合,里面可放置多个动画效果
animationSet.addAnimation() 添加动画到动画集或者:
res中

<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/bounce_interpolator" ></set>

实现:
这里写图片描述

⑥、Interpolator 动画修改器
Interpolator:基本动画的修改器
修改器属性:
1、AccelerateInterpolator:动画从开始到结束,变化率是一个加速的过程。
2、DecelerateInterpolator:动画从开始到结束,变化率是一个减速的过程。
3、CycleInterpolator:动画从开始到结束,变化率是循环给定次数的正弦曲线。
4、AccelerateDecelerateInterpolator:动画从开始到结束,变化率是先加速后减速的过程。
5、LinearInterpolator:动画从开始到结束,变化率是线性变化。
6、OvershootInterpolator 向前甩一定值后再回到原来位置
7、 BounceInterpolator 动画结束的时候弹起。
8、AnticipateInterpolator 开始的时候向后然后向前甩
9、AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
用法:
用法简单,只需要new出动画效果,通过当前动画对象执行setInterpolator(传入具体对象使用)方法。 以位移–>BounceInterpolator 为例:
这里写图片描述
⑦、通过xml来设置动画
在res中新建anim文件夹和xml
这里写图片描述
xml中实际为AnimationSet集合
这里写图片描述

重复的次数在某个动画中能生效,但是在Set标签里不能
!!!注:在xml设置大小,单位为px,并且可以填写% 100%代表当前空间宽高—100%p代表当前布局宽高!!!
Activity调用:

这里写图片描述
在xml中也可以使用动画修改器
这里写图片描述

⑧、AnimationStyle 动画风格
可以用已有的动画来修改其他控件的动画风格,如弹窗,切换等
setAnimationStyle

<style name="AnimationFade"><!-- PopupWindow左右弹出的效果 --><item name="android:windowEnterAnimation">@anim/in</item><item name="android:windowExitAnimation">@anim/out</item></style> 

扩展
1、切换界面时的划动效果
①、在anim中
创建划动的动画 (切换的动画)
这里写图片描述
activity_in.xml—–>2界面从右屏幕宽度位置,向左滑进至0位置
这里写图片描述

activity_out.xml—–>1界面从屏幕的0位置,向左出至负屏幕位置
这里写图片描述
②、设置切换回的动画(按下BACK键)
这里写图片描述
back_in.xml—–>1界面从屏幕负屏幕宽度位置,向右滑进至0位置

back_out.xml—–>2界面从屏幕的0位置,向右滑出至屏幕宽度位置

③、java代码:
1界面:
这里写图片描述
2界面(在按下BACK键后返回1界面,需要在2界面覆写BACK方法)

这里写图片描述
效果:
在1界面按下监听,界面向左滑动显示2页面,在2界面按下BACK向右滑动回到1界面

2、Dialog 从上向下滑出—>默认直接弹出在界面
①、对话框:
这里写图片描述
②、在anmi中设置动画–>滑出与滑入
这里写图片描述
dig_in.xml 进入的动画 —->改变Y坐标 从上往下弹
这里写图片描述
dig_out.xml 出去的动画 —->改变Y坐标 从下往上回
这里写图片描述
③、java:
这里写图片描述
在窗体动画中传入的是样式style,所以应该将②中的动画封装到style中
④、封装动画
这里写图片描述

这里写图片描述
⑨、LayoutAnimationController

new LayoutAnimationController(ani ,delay)

可作用于ListView实现单个条目动画效果:

lv.setLayoutAnimation(controller);lv.startLayoutAnimation();

或:

<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"android:animation="@anim/my_anim"android:delay="1" />LayoutAnimationController layoutAnimationController= AnimationUtils.loadLayoutAnimation(this,R.anim.layoutanim);

java:
这里写图片描述
layout.xml:—->引用test1动画,延时0.7秒执行
这里写图片描述
test1.xml 位移(0,0位置 重复2遍)、透明4秒进入

这里写图片描述