Android动画分析详解(一) View动画、帧动画、LayoutAnimation、Activity切换动画
Android动画分析详解
在Android中动画可以分为三种:View动画、帧动画、属性动画。View动画是通过
操作对象做图形变换(缩放、平移、旋转、透明度)从而达到动画的效果,帧动画是通
过将一个完整的动画的效果分割成一一帧图片,通过顺序播放每一帧图片达到动画的
效,属性动画是通过不断改变对象的属性值达到动画效果,这是Android3.0后新增的
动画效果。
属性动画与View动画的区别在于属性动画操作的是View的属性,而View动画操作的只是View的影像。举个例子:在给一个button设置了点击事件后,使用View动画改变button位置,在新的位置点击事件没有效果,这是因为View动画操作的只是影像,这个button本质上是没有变化的。
View动画
View动画是作用在View对象上,在Android中对应Animation类,它支持四种动画效果:
旋转,平移,缩放,透明度,分别对应Animation类的子类:RotateAnimation,TranslateAnimation,ScaleAnimation,AlphaAnimation,还有一个AnimationSet类,代表动画集的概念,可以包含多种动画,也可包含另外的动画集。
View动画的创建可以通过在代码中创建对应动画效果类的对象即可,也可以通过在XML布局文件中创建,这也是比较方便的写法。
AnimationSet(动画集)
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000" 动画时长
android:fillAfter="true" 动画结束后是否维持当前状态
android:shareInterpolator="true"> 集合中的动画是否和动画集使用同一个插值器
<!--这里添加各种动画效果-->
</set>
TranslateAnimation(平移动画)
可以使View在水平或竖直方向进行平移的动画效果
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0" x起始值
android:fromYDelta="0" y起始值
android:toXDelta="100" x结束值
android:toYDelta="100" y结束值
/>
RotateAnimation(旋转动画)
使View沿着轴点旋转一定的角度,默认轴点事View的中心点。
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0" 旋转起始角度
android:toDegrees="90" 旋转结束角度
android:pivotX="100" 旋转中心点X坐标
android:pivotY="100" 旋转中心点Y坐标
/>
ScaleAnimation(放大缩小动画)
可以使View具有放大缩小的动画效果,默认放大缩小的中心点是View的中心点
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="100" 中心点的X坐标
android:pivotY="100" 中心点Y坐标
android:fromXScale="1" 水平方向缩放的起始值
android:fromYScale="1" 竖直方向缩放的起始值
android:toXScale="1.5" 水平方向缩放的结束值
android:toYScale="1.5" 竖直方向缩放的结束值
/>
AlphaAnimation(透明度动画)
可以使View有一个透明度变化的动画效果
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1" 透明度起始值
android:toAlpha="0.5" 透明度结束值
/>
上述例子都是在XML布局文件中定义View动画,那么如何使用这些布局动画呢,需要用到
AnimationUtils类的静态方法: public static Animation loadAnimation(Context context, @AnimRes int id)
将所需要的参数传入得到Animation对象,调用View的startAnimation()方法即可设置动画效果。 /**
* Start the specified animation now.
*
* @param animation the animation to start now
*/
public void startAnimation(Animation animation) {
另外Animation类也提供了View动画的播放过程监听,通过setAnimationListener
void onAnimationStart(Animation animation); 动画开始
void onAnimationEnd(Animation animation); 动画结束
void onAnimationRepeat(Animation animation); 重复播放
帧动画(AnimationDrawable)
通过顺序的播放一组准备好的图片,形成动画的效果,Android提供了AnimationDrawable类来使用帧动画,比较简单。
在XML文件中定义:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:duration="200" android:drawable="@drawable/ic_preview"/>
<item android:duration="200" android:drawable="@drawable/ic_preview2"/>
</animation-list>
在代码中使用帧动画:
tv.setBackgroundResource(R.drawable.animation_list_layout);
AnimationDrawable background = (AnimationDrawable) tv.getBackground();
background.start();
通过View对象的setBackgroupResource()设置帧动画布局,然后得到帧动画对象,调用start()方法开始播放动画。
关于View动画的一些特殊使用场景
LayoutAnimation
作用于ViewGroup,让ViewGroup中的子元素具有出场的动画效果,典型案例ListView,给ListView设置了LayoutAnimation后,每一个item 都会具有绚丽的动画效果。
实现步骤:
1.定义一个LayoutAnimation(/res/anim/xxx.xml)
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="500"
android:animation="@anim/alpha_layout"
android:animationOrder="random"
/>
delay:子元素进场动画的延时时间
animation:定义好的View动画资源文件
animationOrder:子元素进场顺序reverse:逆序进入random:随机进入normal:正常
两种方式设置给ViewGroup:
- 布局文件 通过 android:layoutAnimation=”“
-
代码中设置,通过ViewGroup的方法setLayoutAnimation:
public void setLayoutAnimation(LayoutAnimationController controller)
这里需要一个LayoutAnimationController动画控制类,直接实例化
Animation animation = AnimationUtils.loadAnimation(this, R.anim.layout_animation_layout);
LayoutAnimationController controller = new LayoutAnimationController(animation);
ll.setLayoutAnimation(controller);
Activity切换动画效果
在Activity进入或者退出时可以指定特殊的动画效果通过overridePendingTransition()
public void overridePendingTransition(int enterAnim, int exitAnim)
enterAnim:Activity被打开时的动画资源ID
exitAnim:Activity退出时的动画资源ID
需要注意的是该方法必须要在startActivity()和finish()方法之后调用才能生效
上一篇: 使用css3制作好看的动画效果
推荐阅读
-
Android动画分析详解(一) View动画、帧动画、LayoutAnimation、Activity切换动画
-
Android Activity切换动画详解及实例
-
Android Activity切换动画详解及实例
-
Android动画三部曲之一 View Animation & LayoutAnimation_html/css_WEB-ITnose
-
Android动画三部曲之一 View Animation & LayoutAnimation_html/css_WEB-ITnose
-
Android的Activity屏幕切换动画(一)-左右滑动切换
-
Android 自定义activity切换动画实现,overridePendingTransition的使用详解
-
使用和管理Android中Activity的切换动画(一)
-
Android动画精炼详解第(一)节:帧动画、补间动画讲解和示例