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);
意义同旋转。。。
<translate
android: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秒进入