android基础-视图动画(Animation)
知识点
- 视图动画的类型
- 视图动画的特点
- 视图动画的实现方式
一、视图动画的类型
- 视图动画主要分四类:透明度,旋转,平移,缩放
- 视图动画的实现原理:在每次绘制视图时view所在的viewgroup中的drawChild函数获取该view的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩阵运算完成动画帧。如果动画没有完成,就继续调用invalidate()函数,启动下一次绘制来驱动动画,从而完成整个动画的绘制
二、视图动画的特点
- 缺点:视图动画不具备交互性,即某个元素发生视图动画后,其响应事件的位置还依然在动画前的地方
- 优点:效率比较高,并且使用方便,一般用于做简单的,不具有交互的动画效果,如进场和退场的动画
三、视图动画的实现方式
- 视图动画实现方式有两种方式实现:1. xml文件配置 2. 代码实现
xml文件配置:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--以下属性值也可以使用百分比数值-->
<alpha
android:fromAlpha="float"
android:toAlpha="float" />
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float" />
<translate
android:fromXDelta="float"
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float" />
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float" />
<!--以下为每种类型的动画都有的属性-->
<translate
android:duration="300"
android:fillAfter="true"
android:fillBefore="true"
android:fillEnabled="true"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:repeatCount="2"
android:repeatMode="restart"
android:startOffset="200"
>
</translate>
</set>
公有方法详解:
android:duration
说明:动画持续时间, 默认值是0 (单位ms)
android:fillAfter
说明:表示动画结束后是否保留动画后的状态,true保留动画后状态,false恢复原来状态,默认值是false
android:fillBefore
说明:表示动画结束后是否保留动画前的状态,true恢复原来状态,false保留动画后状态,默认值是true
android:fillEnabled
说明:如果设置为true,将fillBefore设置考虑在内
android:interpolator
说明:设置动画的变化速率 即插值器,改变动画变换的速度,默认值是@android:anim/accelerate_decelerate_interpolator,即加速减速插值器,在动画开始和结束的时速度较慢,中间时候加速
android:repeatCount
说明:设置动画重复执行的次数 ,默认值是0
android:repeatMode
说明:设置动画重复的模式,其值可以有,restart( 1 ),表示顺序播放,reverse(2)表示重复的时候逆向播放
android:startOffset
说明:设置开始的延迟的时间(单位ms) ,默认值是0
(ps: xml文件中每一个set标签代表一个动画组合,动画组合里面也可再嵌套另外一个set组合)
代码实现:
//透明视图动画
AlphaAnimation alphaAnimation=new AlphaAnimation(0,1);
alphaAnimation.setDuration(3000);
alphaAnimation.setStartOffset(300);
alphaAnimation.setFillEnabled(true);
alphaAnimation.setFillEnabled(true);
view.startAnimation(alphaAnimation);
/**
* 动画集合 : true使用同一个插值器,false使用每个动画独自的插值器
*/
AnimationSet animationSet=new AnimationSet(true);
AlphaAnimation aAnim=new AlphaAnimation(0,1);
alphaAnimation.setDuration(3000);
alphaAnimation.setStartOffset(300);
TranslateAnimation tAnim=new TranslateAnimation(0,200,0,300);
tAnim.setDuration(3000);
animationSet.addAnimation(aAnim);
animationSet.addAnimation(tAnim);
view.startAnimation(animationSet);
//给动画设置监听
RotateAnimation rAnim=new RotateAnimation(0,360);
rAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
代码上都有注释,而且使用也很简单
总结
- 视图动画主要用于与用户没有交互的场景,比如一些进场,退场动画
- 视图动画的使用方式确实挺简单的,不过最好使用XML配置的方式,因为方便阅读以及可以复用
- 视图动画自己虽然已经使用过很长时间了,但是每次使用都总会查一些属性/方法,在这里总结一下基础,对于自己往进阶方向发展有一定帮助吧
参考文章
《android群英传》
android动画之View animation(视图动画)
转载于:https://www.jianshu.com/p/7a40a14ca6a9
上一篇: animation动画
下一篇: 函数定义及调用
推荐阅读
-
Android 动画 属性动画 视图动画 补间动画 帧动画 详解 使用
-
Android实战基础之入门视图及布局讲解
-
黑马Android76期学习笔记01基础--day07--广播,有、无序广播、特殊广播接受者、样式和主题,this与context的区别、普通对话框,进度条对话框、帧动画
-
Android 属性动画(Property Animation) ObjectAnimator的介绍
-
Android基础夯实--重温动画(二)之Frame Animation
-
Android 视图动画
-
android 动画之基础动画 alpha(渐变) scale(缩放) translate(移动) rotate(旋转)
-
Android仿网易游戏的精美开场动画+动画基础详解
-
Android 基础-动画设计和实现
-
Android ViewAnimation(tween animation补间动画)文档教程_html/css_WEB-ITnose