Android Animation动画详解(一): 补间动画
你有没有被一些APP中惊艳的动画效果震撼过,有没有去思考,甚至研究过这些动画是如何实现的呢?
啥?你没有思考,更没有研究过?
好吧,那跟着我一起来学习下如何去实现APP中那些让我们惊羡的动画特效吧,come on!
Tween Animation 补间动画
Frame Animation 帧动画
Layout Animation 布局动画
Property Animation 属性动画
总体来讲,Android中的动画就这四种,而我们常常在APP中看到的动画多多少少都是由这四个基础动画实现的。这几种动画效果中,除了Property实现较为复杂外,其余的三种动画的实现都比较简单。而Android神奇的地方就在于,通过这些简单的动画,我们可以完成较为绚丽的效果。
Android的Tween动画由四种类型组成:alpha、scale、translate、rotate。这四种动画实现起来较为容易,让我们一起来看下如何实现:
2.1 XML配置文件中alpha 渐变透明度动画效果
scale 渐变尺寸伸缩动画效果
translate 画面转换位置移动动画效果
rotate 画面转移旋转动画效果
2.2 Java Code代码中
AlphaAnimation 渐变透明度动画效果
ScaleAnimation 渐变尺寸伸缩动画效果
TranslateAnimation 画面转换位置移动动画效果
RotateAnimation 画面转移旋转动画效果
2.3 XML文件中定义动画首先,我们需要在项目的res目录中新建anim文件夹,然后在anim中创建我们的动画资源:
?xml version="1.0" encoding="utf-8"? set xmlns:android="http://schemas.android.com/apk/res/android" alpha/ scale/ translate/ rotate/ /set
2.4 加载并播放动画
public static Animation loadAnimation (Context context, int id) //第一个参数Context为程序的上下文 //第二个参数id为动画XML文件的引用 //例子: myAnimation= AnimationUtils.loadAnimation(this, R.anim.my_action); //使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件
从方法代码很容易理解,首先利用AnimationUtil去加载动画,之后调用View的startAnimation方法,即可为该View播放动画。
3.1 Alpha Animation
?xml version="1.0" encoding="utf-8"? set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillEnabled="true" android:interpolator="@android:anim/accelerate_interpolator" !-- 透明度控制动画效果 alpha 浮点型值: fromAlpha 属性为动画起始时透明度 toAlpha 属性为动画结束时透明度 0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之间的float数据类型的数字 长整型值: duration 属性为动画持续时间 时间以毫秒为单位 alpha android:fromAlpha="0" android:toAlpha="1" android:duration="3000" /set3.2 Scale Animation
?xml version="1.0" encoding="utf-8"? set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillEnabled="true" android:interpolator="@android:anim/accelerate_interpolator" !-- 尺寸伸缩动画效果 scale 属性:interpolator 指定一个动画的插入器 在我试验过程中,使用android.res.anim中的资源时候发现 有三种动画插入器: accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 浮点型值: fromXScale 属性为动画起始时 X坐标上的伸缩尺寸 toXScale 属性为动画结束时 X坐标上的伸缩尺寸 fromYScale 属性为动画起始时Y坐标上的伸缩尺寸 toYScale 属性为动画结束时Y坐标上的伸缩尺寸 以上四种属性值 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大 pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 布尔型值: fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用 !-- scale android:duration="3000" android:fromXScale="0.2" android:fromYScale="0.2" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" / -- scale android:duration="3000" android:fromXScale="0.2" android:fromYScale="0.2" android:pivotX="0%" android:pivotY="0%" android:toXScale="1.0" android:toYScale="1.0" / /set
?xml version="1.0" encoding="utf-8"? set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillEnabled="true" android:interpolator="@android:anim/accelerate_interpolator" !-- translate 位置转移动画效果 整型值: fromXDelta 属性为动画起始时 X坐标上的位置 toXDelta 属性为动画结束时 X坐标上的位置 fromYDelta 属性为动画起始时 Y坐标上的位置 toYDelta 属性为动画结束时 Y坐标上的位置 没有指定fromXType toXType fromYType toYType 时候, 默认是以自己为相对参照物 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 translate android:duration="1000" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="100" android:toYDelta="100" / !-- translate android:duration="1000" android:fromXDelta="0%p" android:fromYDelta="0%p" android:toXDelta="90%p" android:toYDelta="110%p" / -- /set
3.4 RotateAnimation
?xml version="1.0" encoding="utf-8"? set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" android:fillEnabled="true" android:interpolator="@android:anim/accelerate_interpolator" !-- rotate 旋转动画效果 属性:interpolator 指定一个动画的插入器 在我试验过程中,使用android.res.anim中的资源时候发现 有三种动画插入器: accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 浮点数型值: fromDegrees 属性为动画起始时物件的角度 toDegrees 属性为动画结束时物件旋转的角度 可以大于360度
pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 说明: 以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 rotate android:duration="3000" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="120" / /set
上述代码示例中,我们教大家如何去定义四种基本的补间动画,定义动画结束后,我们来看看播放动画吧:
@OnClick({R.id.btn_translate, R.id.btn_rotate, R.id.btn_alpha, R.id.btn_scale}) public void onClick(View view) { switch (view.getId()) { case R.id.btn_translate: Animation translate = AnimationUtils.loadAnimation(getActivity(), R.anim.translate_animation); imgView.startAnimation(translate); break; case R.id.btn_rotate: Animation rorate = AnimationUtils.loadAnimation(getActivity(), R.anim.rorate_animation); imgView.startAnimation(rorate); break; case R.id.btn_alpha: Animation alpha = AnimationUtils.loadAnimation(getActivity(), R.anim.alpha_animation); imgView.startAnimation(alpha); break; case R.id.btn_scale: Animation scale = AnimationUtils.loadAnimation(getActivity(), R.anim.scale_animation); imgView.startAnimation(scale); break; }
看到了么,播放动画其实很简单的,就两个步骤:1. 加载动画; 2 播放动画。
在上文介绍Tween动画时,我们说过有两种实现方式,一个是在XML文件中,一个是在Java代码中。 之前我们已经介绍了如何在XML文件中配置动画(这也是我们推荐使用的方式)下面我们看看如何在Java代码中实现吧。
//在代码中定义 动画实例对象 private Animation myAnimation_Alpha; private Animation myAnimation_Scale; private Animation myAnimation_Translate; private Animation myAnimation_Rotate;
//根据各自的构造方法来初始化一个实例对象 myAnimation_Alpha = new AlphaAnimation(0.1f, 1.0f); myAnimation_Scale = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); myAnimation_Translate = new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f); myAnimation_Rotate = new RotateAnimation(0.0f, +350.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);just as this,通过构造方法,动画已经定义好了,让我们仔细看下每种动画效果的参数是啥意思:
1. AlphaAnimation
AlphaAnimation类对象构造: public AlphaAnimation(float fromAlpha, float toAlpha)
第一个参数fromAlpha为 动画开始时候透明度,第二个参数toAlpha为 动画结束时候透明度。
说明:0.0表示完全透明,1.0表示完全不透明
Animatio myAnimation_Alpha = new AlphaAnimation(0.1f, 1.0f); //设置动画持续时间 myAnimation_Alpha.setDuration(5000);//设置时间持续时间为 5000毫秒
2. ScaleAnimation
ScaleAnimation类对象构造:public ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
//第二个参数toX为动画结束时 X坐标上的伸缩尺寸
//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸
//第四个参数toY为动画结束时Y坐标上的伸缩尺寸
/*说明:
以上四种属性值
0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
*/
//第五个参数pivotXType为动画在X轴相对于物件位置类型
//第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第七个参数pivotXType为动画在Y轴相对于物件位置类型
//第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
Animation myAnimation_Scale = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
myAnimation_Scale.setDuration(700);//设置时间持续时间为 700毫秒3. TranslateAnimation
TranslateAnimation类对象构造:public TranslateAnimation(float fromXDelta, float toXDelta,float fromYDelta, float toYDelta)
//第二个参数toXDelta为动画结束时 X坐标上的移动位置
//第三个参数fromYDelta为动画起始时Y坐标上的移动位置
//第四个参数toYDelta为动画结束时Y坐标上的移动位置
Animation myAnimation_Translate = new TranslateAnimation(10f, 100f, 10f, 100f); myAnimation_Translate.setDuration(2000);//设置时间持续时间为 2000毫秒
4. RotateAnimation
RotateAnimation类对象构造:public RotateAnimation(float fromDegrees, float toDegrees,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
//第二个参数toDegrees为动画旋转到的角度
//第三个参数pivotXType为动画在X轴相对于物件位置类型
//第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第五个参数pivotXType为动画在Y轴相对于物件位置类型
//第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
Animation myAnimation_Rotate = new RotateAnimation(0.0f,+350.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f); myAnimation_Rotate.setDuration(3000);//设置时间持续时间为 3000毫秒
大家可以看出,通过Java代码,其实也是可以实现这些动画效果,只是我们推荐将动画资源和java代码分开,即使用xml动画资源。
相信看到这里,大家应该都知道如何去定义补间动画了,如果你还不知道,那好,请再看一遍,哈哈哈哈。。。。
基础的补间动画其实就是这么easy,但是大家知道,真的开发过程中,尤其是较为绚烂的效果,肯定不可能只是使用单一的效果,不过不用担心,复杂的动画无非是这些基础的动画结合在一起使用而已,就像复杂的项目都是由基础的代码实现一样。 下一章,将会带领大家一起学习下,稍微复杂的动画效果,duang的一下,特效来啦。
源代码下载地址(免费): http://download.csdn.net/detail/zuiwuyuan/9038761
Android动画(帧动画、补间动画、属性动画)讲解 帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 补间动画:指的是做FLASH动画时,在两个关键帧中间需要做“补间动画”,才能实现图画的运动; 属性动画:帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同时移动、缩放、旋转和淡入淡出的效果也不再只是一种视觉上的动画效果了。所以从Android 3.0版本开始,系统给我们提供了一种全新的动画模式,属性动画(property animation)。
一.概念 补间动画是指开发者无需定义动画过程中的每一帧,只需要定义动画的开始和结束两个关键帧,并指定动画变化的时间和方式等,然后交由Android系统进行计算,通过在这两个关键帧之间插入渐变值来实现平滑过渡,从而对View的内容完成一系列的图形变换来实现动画效果,主要包括四种基本效果:透明变化Alpha、大小变化Scale、位移变化Translate、以及旋转变化Route,这四种效果可以动态组合,从而实现复杂灵活的动画。
Android系统SDK为开发者提供了很多丰富的API去实现绚丽夺目的动画,动画也是学习掌握自定义控件的必不可少的内容。Android动画主要分为如下几类: View Animation: 视图动画(也叫补间动画:Tween Animation)在Android早期版本系统中就已经提供了,这种动画只能被用来设置View的动画。
相关文章
- [Android Pro] 完美解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
- [Android Traffic] android 流量计算方法
- Android应用开发(二):Activity生命周期剖析以及如何启动新的Activity或网页
- android gif动画开源框架android-gif-drawable
- Android开发之旅:android架构
- Android 开发之旅:短信的收发及在android模拟器之间实践(一)
- Android API之android.content.AsyncQueryHandler
- Android API之android.provider.ContactsContract.Data
- Android开发学习---使用Intelij idea 13.1 进行android 开发
- Android Animations动画使用详解
- Android Studio使用总结
- 动画_ _ Android应用开发之所有动画使用详解
- unity调用MMBilling_2.4.2 Android SDK.
- Android修行手册之Kotlin-【类和对象】、【Get和Set】、【继承】、【接口】【抽象类/嵌套类/内部类】、【数据类】、【泛型】
- android开发分享Android中外接键盘的检测的实现
- Android 编译之android.bp详解
- android 延长开机动画,当FallbackHome消失时结束开机动画
- Android报错提示:Failed to resolve: com.android.support.constraint:constraint-layout:1.1.3
- Android app保存数据到Settings.System系统数据库
- android Launcher之获取安装的app列表的两种方法
- Android_WebView_全屏
- 一起学android之设置ListView数据显示的动画效果(24)
- Android 系统休眠唤醒 android-suspend
- 【Android进阶】7、Android 各 SDK 版本的区别与兼容
- Android 解决之依赖包中添加的com.android.support版本不同导致冲突的问题
- android开发,开发环境(Android Studio)安装
- 迁移到Android后android.support.v4.content.FileProvider运行崩溃