原文地址:http://www.cnblogs.com/kross/p/3376451.html

最近自学了下动画的相关知识,总结为今天的文章,希望对大家有帮助。

Android中的动画大致分为三种:逐帧动画视图动画属性动画

1.逐帧动画

这个动画效果是最简单的,也是非常容易实现的,原理就是,在一个ImageView上不断的切换显示的图片(当然也不一定是图片),来达到动画的效果,很明显,这样的实现方式和动漫,电影的原理是一样的。

实现的过程是非常简单的,大致上是:

准备每一帧的图像(可以是图片,也可以是通过xml定义的图形)。

给ImageView设置drawable,设置动画属性即可。

现在就来着手实现一下,在下打算做一个小圆形,由黑色逐渐变成白色的逐帧动画。

我们可以通过<shape>来制作一些简单的图形。在/res/drawable/目录下新建xml文件命名为ball1.xml。代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="oval">
  4. <solid
  5. android:color="#000000"/>
  6. <size
  7. android:width="100dp"
  8. android:height="100dp" />
  9. </shape>

依照上面这个步骤,响应的创建另外三个xml文件,一共是4个xml文件,分别是ball1.xml、ball2.xml、ball3.xml、ball4.xml。

它们之间的区别就是颜色不断的变白。通过改变android:color属性就可以了。

接下来,我们需要创建一个播放列表,来安排这4张图像的顺序与时长。

创建/res/drawable/ball_list.xml文件,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:visible="true"
  4. android:oneshot="true">
  5. <item
  6. android:drawable="@drawable/ball1"
  7. android:duration="250"/>
  8. <item
  9. android:drawable="@drawable/ball2"
  10. android:duration="250"/>
  11. <item
  12. android:drawable="@drawable/ball3"
  13. android:duration="250"/>
  14. <item
  15. android:drawable="@drawable/ball4"
  16. android:duration="250"/>
  17. </animation-list>

android:oneshottrue的时候播放一遍就停止了。

接下来,我们在activity_main.xml的布局中添加一个ImageView标签,给它的src属性设置为ball_list,代码如下:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10. <ImageView
  11. android:id="@+id/ball"
  12. android:layout_width="match_parent"
  13. android:layout_height="match_parent"
  14. android:src="@drawable/ball_list"/>
  15. </RelativeLayout>

最后一步,只需要在程序代码中写上如下的代码就可以让动画播放了。

  1. this.iv = (ImageView)findViewById(R.id.ball);
  2.  
  3. this.iv.setOnClickListener(new OnClickListener() {
  4.  
  5. @Override
  6. public void onClick(View v) {
  7. AnimationDrawable ad = (AnimationDrawable)iv.getDrawable();
  8. ad.stop();
  9. ad.start();
  10.  
  11. }
  12. });

2.视图动画

视图动画是在限定的属性集上对视图进行操纵的动画效果,但视图的真正属性并不会被修改,比如,通过视图动画放大了一个按钮的尺寸,但该按钮的响应范围还是原来那么大,它只是看上去变大了而已。因为这样的原因,本人并不是很看好这样的动画实现,Android3.0之后推出了属性动画,视图动画理所当然的被启用了,但对于还在使用Android3.0框架的设备,视图动画当然是必不可少的。

视图动画可以操纵以下几个属性(或许说属性并不太正确)。

Translate,移动视图

Scale,缩放视图

Rotate,旋转视图

Alpha,视图的透明度

我们可以将动画的定义写在xml里面,如下的代码:

  1. <?xml version="1.0" encoding="utf-8">
  2. <translate xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:duration="500"
  4. android:toYDelta="25%"
  5. android:toXDelta="25%"/>

以上的动画在数值上是均匀变化的,如果需要一些特殊的数值变化,比如先快后慢,越来越快,之类的效果,可以使用插值器,这个东西就类似于给数值的变化曲线添加了一条曲线。

在java代码中使用动画的时候使用如下代码就好:

  1. TextView tv = (TextView)findViewById(R.id.textview);
  2. Animation animation = AnimationUtils.loadAnimation(this, R.anim.slide);

以上就是视图动画的简单用法,我并没有过多的看方面的内容,所以介绍的不是很多。

3.属性动画

属性动画可以运行开发者直接修改任何对象的属性,使之形成动画,这可能会让一些不是视图的东西变得很古怪。但它非常强大,非常好用~强烈推荐!!\(^o^)/~

本文只介绍最好用的方法,我推荐使用ObjectAnimator对象,具体方法如下:

  1. View v = findViewById(R.id.my_view);
  2. ObjectAnimator oa = ObjectAnimator.ofFloat(v, View.ALPHA, 0f, 1f);
  3. oa.setDuration(500);
  4. oa.start();

以上的代码,就会完成在500毫秒内,v这个视图由完全透明到完全不透明的变化过程,如果需要更好的数值变化效果,同样可以使用插值器。

转载请注明出处:http://www.cnblogs.com/kross/p/3376451.html

新浪微博:http://weibo.com/KrossFord

初探Android动画之门的更多相关文章

  1. Lottie开源库实现Android动画效果

    Lottie简介 Lottie是一个支持Android.iOS.React Native,并由Adobe After Effects制作aep格式的动画,然后经由bodymovin插件转化渲染为jso ...

  2. Android动画效果之自定义ViewGroup添加布局动画

    前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...

  3. Android动画效果之Property Animation进阶(属性动画)

    前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...

  4. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  5. Android动画效果之Frame Animation(逐帧动画)

    前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...

  6. Android动画效果之Tween Animation(补间动画)

    前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation ...

  7. Android动画

    [浅谈Android动画] 总共四种:Tween Animation变换动画.Frame Animation帧动画 Layout Animation布局动画.Property Animation 属性 ...

  8. Android动画学习(二)——Tween Animation

    前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...

  9. Android动画学习(一)——Android动画系统框架简介

    2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...

随机推荐

  1. 关于NODEJS性能测试和优缺点总结

    最近公司开发了一套新产品,采用nodejs前端+Java后端框架,为完全的前后端分离结构,以下为相关信息. 软件及功能: 软件 功能 Nginx 负责反向代理和负载均衡 Nodejs 前端代码 JDK ...

  2. Linux入门进阶第二天——软件安装管理(上)

    一.大纲介绍 这里介绍的仅仅是两大家族之一的RPM,关于Debian家族的DPKG,请参考:http://justcoding.iteye.com/blog/1937171 二.简介 软件包分类: 源 ...

  3. 20155216 2016-2017-2 《Java程序设计》第十周学习总结

    20155216 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 了解计算机网络基础 概念 计算机网络基础,是指将地理位置不同的具有独立功能的多台计算机及其外 ...

  4. jdk和tomcat版本对应

    见tomcat的官网说明:tomcat.apache.org/whichversion.html Apache Tomcat ®是一个开源软件实现了Java Servlet和JavaServer Pa ...

  5. windows查看系统版本号

    win+R,输入cmd,确定,打开命令窗口,输入msinfo32,注意要在英文状态下输入,回车.然后在弹出的窗口中就可以看到系统的具体版本号了.   win+R,输入cmd,确定,打开命令窗口,输入v ...

  6. sql语句-6-高级查询

  7. JavaScript学习笔记(一)——JS速览

    第一章 JS速览 1 限制时间处理事件 <script> setTomeout(wakeUpUser,5000); function wakeUpUser() { alert(" ...

  8. centos 6.5 双网卡 上网 virtualbox nat hostonly

    虚拟机两张网卡:分别调成NAT(eth0)和host only(eht1)模式. nat的网卡不用设置,host only网卡调为(vi /etc/sysconfig/network-scripts/ ...

  9. 如何隐藏掉SQL Server中自带系统数据库,数据表,存储过程等显示文件,只显示用户的数据库,数据表等文件

    企业管理器了,---->   编辑该数据库的注册属性--->“常规”属性页下面-->“显示系统数据库和系统对象”的选项去掉

  10. Python-2.7 配置tab自动补全功能

    作者博文地址:http://www.cnblogs.com/spiritman/ 之前一直使用shell编程,习惯了shell的 tab 自动补全功能,而Python的命令行却不支持 tab 自动补全 ...