Android开发实战之补间动画和属性动画

说起动画,其实一点也不陌生,在使用一款app的时候为了优化用户体验,多多少少的,都会加入动画。

安卓中的动画,分为两大类:补间动画和属性动画。本篇博文会详细介绍总结这两大动画,希望本篇博文对你的学习和生活有所帮助。

**补间动画**

补间动画分为四类:平移动画,旋转动画,缩放动画和渐变动画。这几类动画用法都差不多,只是对象参数不同这里我统一展示出来。以下是效果图:

实现代码很简单:

       btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //平移动画
                TranslateAnimation translate=new TranslateAnimation(Animation.RELATIVE_TO_SELF,300,
                        Animation.RELATIVE_TO_SELF,300);
                translate.setDuration(3000);
                translate.setFillAfter(true);
                img.startAnimation(translate);
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //旋转动画
                RotateAnimation rotate=new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,
                        Animation.RELATIVE_TO_SELF,0.5f);
                rotate.setFillAfter(true);
                rotate.setDuration(3000);
                img.startAnimation(rotate);
            }
        });
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //缩放动画
                ScaleAnimation scale=new ScaleAnimation(0,2,0,2,Animation.RELATIVE_TO_SELF,0.5f,
                        Animation.RELATIVE_TO_SELF,0.5f);
                scale.setDuration(3000);
                img.startAnimation(scale);
            }
        });
        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //渐变动画
                AlphaAnimation alpha =new AlphaAnimation(0,1);
                alpha.setDuration(3000);
                img.startAnimation(alpha);
            }
        });

总结以下:

AlphaAnimation:渐变动画,0.0f完全透明,1.0f完全显示。

RotateAnimation:旋转动画。起始角度,结束角度,相对值,横坐标的比例,相对值,纵坐标的比例。(结束角度为正就为顺时针,负数为逆时针)

ScaleAnimation:比例动画,x的位置比例起始,x的位置比例结束,y的位置比例起始,y的位置比例结束,x的锚点,x的参数,y的锚点,y的参数

setDuration:设置动画播放时间。

setFillAfter(true):界面停留在动画结束的状态·而不是初始化状态。

除此之外我们还可以将这几个动画效果组合起来,实现组合动画。

效果图:

代码也是简单易懂:

 AnimationSet animationSet=new AnimationSet(false);
                TranslateAnimation translate=new TranslateAnimation(Animation.RELATIVE_TO_SELF,300,
                        Animation.RELATIVE_TO_SELF,300);
                translate.setDuration(3000);
                translate.setFillAfter(true);
                animationSet.addAnimation(translate);
                RotateAnimation rotate=new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,
                        Animation.RELATIVE_TO_SELF,0.5f);
                rotate.setFillAfter(true);
                rotate.setDuration(3000);
                animationSet.addAnimation(rotate);
                ScaleAnimation scale=new ScaleAnimation(0,2,0,2,Animation.RELATIVE_TO_SELF,0.5f,
                        Animation.RELATIVE_TO_SELF,0.5f);
                scale.setDuration(3000);
                animationSet.addAnimation(scale);
                AlphaAnimation alpha =new AlphaAnimation(0,1);
                alpha.setDuration(3000);
                animationSet.addAnimation(alpha);
                img.startAnimation(animationSet);

AnimationSet通过addAnimation()方法,可以将动画结合起来,实现更多的动画效果。

**属性动画**

早起的补间动画是没有改变view的参数的,view在刷新的时候会变回原来的样子。所以,在安卓3.0之后,谷歌推出了属性动画。

而属性动画的实质就是通过例如:translationX,translationY,scaleX,scaleY,rotationX,rotationY等等,这些新增的属性,记录View的值

从而使View的动画可以得到保存,刷新后不会消失。

下面是一个简单例子,通过属性动画改变x上的缩放值:

接下来是实现代码:

  btn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ObjectAnimator objectAnimator= ObjectAnimator.ofFloat(img,"scaleX",0.5f);
                objectAnimator.setDuration(3000);
                objectAnimator.setStartDelay(1000);
                objectAnimator.start();
            }
        });

如果这样实现,其实是有很多弊端的。因为,属性动画只有在3.0的版本之后能用,版本过低,是没法使用的。并且,实现一个属性动画,参数也过于繁琐。所以,这里推荐

使用开源框架:nineoldandroids。

如果你使用的是Android studio 在gradle中加入:dependencies {
compile ‘com.nineoldandroids:library:2.4.0‘
}

使用这个开源框架,不但能在低版本中使用属性动画,而且,实现更为简单更加方便。

   btn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //NIneOldAndroid中的一个类实现
                ViewPropertyAnimator
                        .animate(img)                        .scaleX(0.5f)
                        .setInterpolator(new OvershootInterpolator())//超过一点回来
                        .setDuration(3000)
                        .start();
            }
        });

一个简单的例子:

怎么样,是不是更加好看了?

代码也是非常简单:

  ViewPropertyAnimator
                        .animate(img)
                        .translationY(600)
                        .setInterpolator(new BounceInterpolator())//弹性掉落
                        .setDuration(1500)
                        .start();

还可以这样:

代码:

      ViewPropertyAnimator
                        .animate(img)
                        .translationX(40)
                        .setInterpolator(new CycleInterpolator(6))//左右来回抖动
                        .setDuration(1500)
                        .start();

好了,关于动画就介绍到这里,如果懂得了基本方法,如何酷炫的动画都可以通过自己组合起来,如果本篇博文有什么写的不对的地方,欢迎留言,互相探讨,最后,希望

你通过这篇博文对你的学生和生活有所帮助。

时间: 2024-08-06 11:51:48

Android开发实战之补间动画和属性动画的相关文章

Android 动画系列之补间(Tween)动画详解

转载请标明出处: http://blog.csdn.net/Airsaid/article/details/51591239 本文出自:周游的博客 前言 开发环境 补间动画的属性 Animation的属性 Alpha属性 Rotate属性 Scale属性 Translate属性 AnimationSet属性 补间动画的使用 代码中使用补间动画 XML中定义补间动画资源AnimationDrawable 补间Tween动画与Interpolator 前言 上一篇博客中写了逐帧动画(Frame)的使

Android开发之Tween(补间动画)完全解析(下)

欢迎转载,转载请注明出处:http://blog.csdn.net/dmk877/article/details/51980734 在上一篇文章中,我们详细讨论了Tween动画的xml的实现以及interpolator的使用,相信通过上篇文章大家对Tween动画的xml属性的配置会有一个详细的理解,当然这篇文章也是承接上篇文章,所以强烈建议先阅读上篇文章:Android开发之Tween(补间动画)完全解析(上),这篇文章将从代码的角度实现上篇文章的效果.如有疑问请留言,如有谬误欢迎批评指正. T

Xamarin Android开发实战(上册)大学霸内部资料

Xamarin Android开发实战(上册)大学霸内部资料 试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamarin Android开发专向教程.本教程详细讲解如何基于Windows系统,在Visual Studio 2013开发环境中,使用Xamarin开发Android应用APP. 目  录 第1章  Xamarin开发Anroid应用介绍 1 1.1  Xamarin基本知识 1 1.1.1  Xamari

Android项目实战(四):ViewPager切换动画(3.0版本以上有效果)

原文:Android项目实战(四):ViewPager切换动画(3.0版本以上有效果) 学习内容来自“慕课网” 一般APP进去之后都会有几张图片来导航,这里就学习怎么在这张图片切换的时候添加切换动画效果 先看布局文件 activity_main.layout <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.c

Android开发实战(十八):Android Studio 优秀插件:GsonFormat

原文:Android开发实战(十八):Android Studio 优秀插件:GsonFormat Android Studio 优秀插件系列: Android Studio 优秀插件(一):GsonFormat ------------------------------------------------------------------------------------------------------- 这几天没有活,于是乎整理了一些代码,顺便把一些一直在使用的东西也整理下,然后学

我为什么要写《OpenCV Android 开发实战》这本书

我为什么要写<OpenCV Android 开发实战>这本书 2015年我出版了个人第一本关于图像处理方面的书籍<Java图像处理-编程技巧与应用实践>,这本书主要是从理论与编码上面详细阐述了图像处理基础算法以及它们在编码实现上的技巧.一转眼已经三年过去了,在这三年的时光里我无时无刻都在关注图像处理与计算机视觉技术发展与未来,同时渐渐萌发了再写一本图像处理相关技术书籍的念头,主要是因为<Java图像处理-编程技巧与应用实践>一书主要不是针对工程应用场景,读者在学完之后很

Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)

在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持两种动画:补间动画和属性动画,至于这两种动画的区别这里不再介绍,希望开发者都能在使用的过程中体会两者的不同. 本文使用属性动画完成,说到属性动画,肯定要提到 JakeWharton大神写的NineOldAndroids动画库,如果你的app需要在android3.0以下使用属性动画,那么这个库就很有作用了,如果只需要在高版本使用,那么直接

Android动画之属性动画

当我们看到别人的APP里面或者写的Demo里面的一些很牛逼得动画效果的时候,是否会有那么一种冲动我要看看它的源代码到底是怎么写的,为毛我就是写不出这样的动画效果呢,为毛我只能做哪些简单的平移,缩放,旋转,透明度改变的动画效果呢.呵呵,当你这么想的时候,证明你应该存在两种主要的问题:第一,就是你的确基础知识不过关,别人用到的东西,你根本就没有接触过,但是这些东西的确是API里面确实存在的东西.第二,就是你的经验不够,逻辑思维能力还有待提升.任何一个很酷很炫的动画效果,都应该是由一系列的动画效果合成

Android动画学习(缓动动画与属性动画的区别)

前言: 在 Android动画学习(概述)中,如果你看过这篇帖子,你应该会对缓动动画和属性动画之间的区别产生疑问,因为在它们的应用中,你会感觉这两种动画有着一些相似的地方,为此,我打算把这两种动画之间的区别做一下说明 区别: 在这里先附上官方文档对于这两种动画的区别说明(我所说的缓动动画对应在下文中的英文为:View Animation,属性动画对应在下文中的英文为:Property Animation): How Property Animation Differs from View Ani