Android动画的学习
常见的动画分为:
-补间动画
-帧动画
- 属性动画
学完这个分享自己项目一个简单的动画:
转场动画:这个是谷歌提供的样式!下面自己模仿了一下。
模仿谷歌设计来自己做了一个。
一补间动画:
对于学过flash动画的人来说补间动画很好理解的,因为动画开始和结尾的中间过程都是假象,是渲染出来的表象,只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应。
补间动画由Animation类来实现具体效果,包括平移(TranslateAnimation)、缩放(ScaleAnimation)、旋转(RotateAnimation)、透明度(AlphaAnimation)四个子类。
实现:
补间动画在android里面支持xml来设置或者java代码设置。
常见的布局动画类如下:
TranslateAnimation
translate属性 | TranslateAnimation | 含义 |
---|---|---|
android:fromXDelta | TranslateAnimation translateAnimation=TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta); | 平移起点X坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点) |
android:fromYDelta | 同上 | 同理fromXDelta |
android:toXDelta | 同上 | 平移终点X坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点) |
android:toYDelta | 同上 | 同上 |
android:fillAfter | translateAnimation.setFillAfter(true); | 动画显示结束保持最后一帧 |
android:duration | translateAnimation.setDuration(3000); | 动画执行的时间 |
android:repeatCount | translateAnimation.setRepeatCount(TranslateAnimation.INFINITE); | 动画执行的次数可以是整数或者infinite为无限循环执行动画 |
使用如下:
translate.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="100%"
android:toYDelta="-100%"
android:fillAfter="true"
android:duration="1000"
>
</translate>
AlphaAnimation
Alpha属性 | AlphaAnimation | 含义 |
---|---|---|
android:fromAlpha | AlphaAnimation alphaAnimation=new AlphaAnimation(float fromAlpha, float toAlpha); | 是View视图起始透明度,透明度是0-1 |
android:toAlpha | 同上 | 结束时的透明度 |
android:fillAfter | alphaAnimation.setFillAfter(true); | 动画显示结束保持最后一帧 |
android:duration | alphaAnimation.setDuration(3000); | 动画执行的时间 |
android:repeatCount | alphaAnimation.setRepeatCount(TranslateAnimation.INFINITE); | 动画执行的次数可以是整数或者infinite为无限循环执行动画 |
使用如下:
alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1"
android:toAlpha="0.5"
android:fillAfter="true"
android:duration="3000"
>
</alpha>
RotateAnimation
RotateAnimation 属性 | RotateAnimation | 含义 |
---|---|---|
android:fromDegrees | RotateAnimation rotateAnimation=RotateAnimation(float fromDegrees, float toDegrees); | 是View视图起始角度 |
android:toDegrees | 同上 | 结束时的角度 |
android:fillAfter | rotateAnimation.setFillAfter(true); | 动画显示结束保持最后一帧 |
android:duration | rotateAnimation.setDuration(3000); | 动画执行的时间 |
android:repeatCount | rotateAnimation.setRepeatCount(TranslateAnimation.INFINITE); | 动画执行的次数可以是整数或者infinite为无限循环执行动画 |
使用如下:
rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="90"
android:fillAfter="true"
android:duration="3000"
>
</rotate>
ScaleAnimation
ScaleAnimation属性 | ScaleAnimation | 含义 |
---|---|---|
android:fromXScale | ScaleAnimation scaleAnimation=ScaleAnimation(float fromX, float toX, float fromY, float toY) | 这个相信能看懂。 |
android:toXScale | 同上 | 结束时的位置 |
android:fillAfter | scaleAnimation.setFillAfter(true); | 动画显示结束保持最后一帧 |
android:duration | scaleAnimation.setDuration(3000); | 动画执行的时间 |
android:repeatCount | scaleAnimation.setRepeatCount(TranslateAnimation.INFINITE); | 动画执行的次数可以是整数或者infinite为无限循环执行动画 |
使用如下:
scale .xml
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="0.5"
android:toXScale="1"
android:fromYScale="0.5"
android:toYScale="1"
android:fillAfter="true"
android:duration="3000"
>
</scale>
AnimationSet
当然了有动画集合这个类了。使用也是很简单的:
set.xml
<?xml version="1.0" enco