初探Android动画之门
原文地址:http://www.cnblogs.com/kross/p/3376451.html
最近自学了下动画的相关知识,总结为今天的文章,希望对大家有帮助。
Android中的动画大致分为三种:逐帧动画,视图动画,属性动画。
1.逐帧动画
这个动画效果是最简单的,也是非常容易实现的,原理就是,在一个ImageView上不断的切换显示的图片(当然也不一定是图片),来达到动画的效果,很明显,这样的实现方式和动漫,电影的原理是一样的。
实现的过程是非常简单的,大致上是:
准备每一帧的图像(可以是图片,也可以是通过xml定义的图形)。
给ImageView设置drawable,设置动画属性即可。
现在就来着手实现一下,在下打算做一个小圆形,由黑色逐渐变成白色的逐帧动画。
我们可以通过<shape>来制作一些简单的图形。在/res/drawable/目录下新建xml文件命名为ball1.xml。代码如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#000000"/>
<size
android:width="100dp"
android:height="100dp" />
</shape>
依照上面这个步骤,响应的创建另外三个xml文件,一共是4个xml文件,分别是ball1.xml、ball2.xml、ball3.xml、ball4.xml。
它们之间的区别就是颜色不断的变白。通过改变android:color属性就可以了。
接下来,我们需要创建一个播放列表,来安排这4张图像的顺序与时长。
创建/res/drawable/ball_list.xml文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:visible="true"
android:oneshot="true">
<item
android:drawable="@drawable/ball1"
android:duration="250"/>
<item
android:drawable="@drawable/ball2"
android:duration="250"/>
<item
android:drawable="@drawable/ball3"
android:duration="250"/>
<item
android:drawable="@drawable/ball4"
android:duration="250"/>
</animation-list>
android:oneshot为true的时候播放一遍就停止了。
接下来,我们在activity_main.xml的布局中添加一个ImageView标签,给它的src属性设置为ball_list,代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/ball"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ball_list"/>
</RelativeLayout>
最后一步,只需要在程序代码中写上如下的代码就可以让动画播放了。
this.iv = (ImageView)findViewById(R.id.ball);
this.iv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AnimationDrawable ad = (AnimationDrawable)iv.getDrawable();
ad.stop();
ad.start();
}
});
2.视图动画
视图动画是在限定的属性集上对视图进行操纵的动画效果,但视图的真正属性并不会被修改,比如,通过视图动画放大了一个按钮的尺寸,但该按钮的响应范围还是原来那么大,它只是看上去变大了而已。因为这样的原因,本人并不是很看好这样的动画实现,Android3.0之后推出了属性动画,视图动画理所当然的被启用了,但对于还在使用Android3.0框架的设备,视图动画当然是必不可少的。
视图动画可以操纵以下几个属性(或许说属性并不太正确)。
Translate,移动视图
Scale,缩放视图
Rotate,旋转视图
Alpha,视图的透明度
我们可以将动画的定义写在xml里面,如下的代码:
<?xml version="1.0" encoding="utf-8">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:toYDelta="25%"
android:toXDelta="25%"/>
以上的动画在数值上是均匀变化的,如果需要一些特殊的数值变化,比如先快后慢,越来越快,之类的效果,可以使用插值器,这个东西就类似于给数值的变化曲线添加了一条曲线。
在java代码中使用动画的时候使用如下代码就好:
TextView tv = (TextView)findViewById(R.id.textview);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.slide);
以上就是视图动画的简单用法,我并没有过多的看方面的内容,所以介绍的不是很多。
3.属性动画
属性动画可以运行开发者直接修改任何对象的属性,使之形成动画,这可能会让一些不是视图的东西变得很古怪。但它非常强大,非常好用~强烈推荐!!\(^o^)/~
本文只介绍最好用的方法,我推荐使用ObjectAnimator对象,具体方法如下:
View v = findViewById(R.id.my_view);
ObjectAnimator oa = ObjectAnimator.ofFloat(v, View.ALPHA, 0f, 1f);
oa.setDuration(500);
oa.start();
以上的代码,就会完成在500毫秒内,v这个视图由完全透明到完全不透明的变化过程,如果需要更好的数值变化效果,同样可以使用插值器。
转载请注明出处:http://www.cnblogs.com/kross/p/3376451.html
新浪微博:http://weibo.com/KrossFord
初探Android动画之门的更多相关文章
- Lottie开源库实现Android动画效果
Lottie简介 Lottie是一个支持Android.iOS.React Native,并由Adobe After Effects制作aep格式的动画,然后经由bodymovin插件转化渲染为jso ...
- Android动画效果之自定义ViewGroup添加布局动画
前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...
- Android动画效果之Property Animation进阶(属性动画)
前言: 前面初步认识了Android的Property Animation(属性动画)Android动画效果之初识Property Animation(属性动画)(三),并且利用属性动画简单了补间动画 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- Android动画效果之Frame Animation(逐帧动画)
前言: 上一篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画),今天来总结下Android的另外一种动画Frame ...
- Android动画效果之Tween Animation(补间动画)
前言: 最近公司项目下个版本迭代里面设计了很多动画效果,在以往的项目中开发中也会经常用到动画,所以在公司下个版本迭代开始之前,抽空总结一下Android动画.今天主要总结Tween Animation ...
- Android动画
[浅谈Android动画] 总共四种:Tween Animation变换动画.Frame Animation帧动画 Layout Animation布局动画.Property Animation 属性 ...
- Android动画学习(二)——Tween Animation
前两天写过一篇Android动画学习的概述,大致的划分了下Android Animation的主要分类,没有看过的同学请移步:Android动画学习(一)——Android动画系统框架简介.今天接着来 ...
- Android动画学习(一)——Android动画系统框架简介
2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...
随机推荐
- Go语言中其他数据与字符串类型的转换
1 概述 Go语言是强类型语言,因此总会需要将字符串转成需要的类型.比如整型和字符串转换,字符串和布尔型的转换等.本文就介绍如何完成这些转换,以下是Go语言关于字符串转换的整理说明,主要是与切片类型的 ...
- python+MongoDB使用示例
本博客起源于博主的大三NoSQL课程设计,采用python+MongoDB结合方式,将数据从txt文件导入MongoDB之中,再将其取出以作图.主要技术是采用python与MongoDB结合存储读取方 ...
- fixed layout android
http://benfrain.com/easy-css-fix-fixed-positioning-android-2-2-2-3/ http://caniuse.com/#feat=css-fix ...
- MySQL高级——课程大纲
一.课程概述 总体结构概述: //特别注意本次课程目标在于写出高效的JAVA代码,而非DBA等的专业调优 各章节概述
- [agc003F]Fraction of Fractal
Description 传送门 Solution 本篇博客思路来自大佬的博客(侵删). 我们定义如果网格的第一行和最后一行的第i列都为黑色,则它是一个上下界接口.左右界接口定义同上. 如果上下界接口和 ...
- Dlib简介及在windows7 vs2013编译过程
Dlib是一个C++库,包含了许多机器学习算法.它是跨平台的,可以应用在Windows.Linux.Mac.embedded devices.mobile phones等.它的License是Boos ...
- [并发并行]_[线程模型]_[Pthread线程使用模型之二 工作组work crew]
Pthread线程使用模型之二工作组(Work crew) 场景 1.一些耗时的任务,比如分析多个类型的数据, 是独立的任务, 并不像 pipeline那样有序的依赖关系, 这时候pipeline就显 ...
- day 12 文件操作
1.文件定位读写 f.seek(2,0) ##### f.seek(2,0) In [4]: f = open("test.py","r") In [5]: ...
- 【LG3243】[HNOI2015]菜肴制作
题面 洛谷 题解 首先我们有个非常显然的思路, 就是直接拓扑排序,用小根堆代替队列再按顺序输出,但是很显然是错的, 因为这只保证了字典序最小,而无法保证答案最优,\(<2,4>,<3 ...
- .net core 使用windows版redis
在项目中为了减少程序占用内存(将结果保存在全局变量里面,会占用内存),要求使用redis.开始了爬坑的过程.o(╥﹏╥)o c#操作redis 基本就这3中情况: ServiceStack.Redis ...