Android之Animation动画的使用(一)
我们在使用一些控件时候,难免会设置一些进入和退出的动画效果,比如popupwindow、listview的item动画、按钮、图片等等,要使这些控件有动画效果,当然需要用到Animation了。
下面我们就来讲讲Animation有哪些动画效果吧。
Android的Animation由四种类型组成:alpha、scale、translate、rotate,对应的效果如下:
XML配置文件startAnimation(animation);
| alpha |
渐变透明度动画效果 |
| scale |
渐变尺寸伸缩动画效果 |
| translate |
画面转换位置移动动画效果 |
| rotate |
画面转移旋转动画效果 |
xml配置文件是放在anim目录下的:
新建动画xml文件,动画效果都是通过这几个属性控制的:
我先来看看怎么使用Animation吧,最后我会逐个讲讲每个标签的属性及用法,使用Animation有三个方法:
1、第一个方法,就是先加载anim目录下的xml文件,通过Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha)得到这个xml文件的动画效果(这个是通用的得到动画效果的,还有每个动画对应的单独的类),然后通过各个控件的button.setAnimation(animation)或者button.startAnimation(animation)方法可以设置动画,startAnimation()是显示控件立即执行动画的,我们一般用它,设置的动画是显示控件的时候有动画效果的。
当然也可以在这个xml文件中,不用set属性设置多个集合的动画效果,可以单独的设置为某一种,得到一种动画效果,即还是用上面那个通用的方法加载xml文件的动画,其它的也是如此。当然也可以不用xml文件得到动画,可以用相应的属性类来操作,即,AlphaAnimation
alpha = new AlphaAnimation(fromAlpha, toAlpha)来设置透明度的变化从而得到该动画效果,其它的也是一样的,都有对应的类,但是如果我们想用代码操作不用xml文件来得到多个复合动画效果,那该怎么做呢?答案是通过:AnimationSet对象(我把它称为动画集合)来操作的:
AnimationSet set = new AnimationSet(true);//这个参数ture的意思是该动画集合里的所有动画类型的差值器都用该动画集合设置的(即set.setInterpolator(Interpolator i)设置的),即不用自己的单独设置(alpha.setInterpolator(i)或在xml文件中设置)的插值器,设置为false就是用每个动画类型自己设置的插值器,插值器其实就是一个内置的有指定动画效果的东西,后面我会讲。 AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.0f);//透明度从不透明到完全透明 alpha.setDuration(1000);//设置动画持续的时间 set.addAnimation(alpha);//添加一个透明度变化的动画效果,其它的效果也是这样添加
这样,我们就可以通过纯代码来设置多个复合的效果了。一般控件有setAnimation方法来设置的动画是显示后不要消失的。
2、第二个方法,这个方法多用于popupWindow的进入效果和退出效果,因为这个是通过style样式来设置的,popupWindow中没有setAnimation方法,只能通过popWindow.setAnimationStyle(R.style.showPopupAnimation);来设置,所以它可以设置进入和退出效果,这个是显示后需要消失的。废话不多说,这个设置动画直接是使用xml文件,不需要代码的,这里以透明效果为例,当然做复合效果也行。上代码吧:
2.1anim文件夹下的代码:alpha_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 持续时间 -->
<alpha android:duration="1000" >
<!-- 开始显示时的透明度 -->
android:fromAlpha="0.0"
<!-- 最后显示的透明度 -->
android:toAlpha="1.0"
/>
</alpha>
</set>
alpha_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="1000"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
上面的两段代码分别是进入和退出的动画效果。
2.2【注意】最重要的是在values文件夹下的styles.xml中进行配置:
配置的代码为:添加下面一段代码即可:
<style name="showPopupAnimation" parent="android:Animation"> <!--name为调用这个style动画的名字,自己设置的-->
<item name="android:windowExitAnimation">@anim/alpha_exit</item><!-- 退出动画-->
<item name="android:windowEnterAnimation">@anim/alpha_in</item><!--- 进入动画->
</style>
2.3最后再调用这个style即可
public void pop(){
View view = getLayoutInflater().inflate(R.layout.view, null);
PopupWindow popWindow = new PopupWindow(view, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);
popWindow.setOutsideTouchable(true);
popWindow.setBackgroundDrawable(new BitmapDrawable());
popWindow.setAnimationStyle(R.style.showPopupAnimation);
popWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
}
3、还有一个就是用来控制Activity直接跳转时用的overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out);这种很简单,直接把xml文件拿来用即可,注意,这个overridePendingTransition(R.anim.push_left_in,R.anim.push_left_out);必须放在startActivity()之后。
好了,Animation动画效果就讲到这里了。
接下来讲内置的Interpolator插值器的动画参数效果和怎么结合Animation来使用。插值器顾名思义就是把某一个动画效果插入到另一个地方中使用。
首先,先给出插值器的各个参数的动画效果吧
Interpolator的系统值有下面几个:
意义如下:
- AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
- AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
- AnticipateInterpolator 开始的时候向后然后向前甩
- AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
- BounceInterpolator 动画结束的时候弹起
- CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
- DecelerateInterpolator 在动画开始的地方快然后慢
- LinearInterpolator 以常量速率改变
- OvershootInterpolator 向前甩一定值后再回到原来位置
那么,怎么使用插值器呢?
1、在anim目录下的xml文件中,我们可以通过android:interpolator=""属性来设置插值器的值,即:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="true"
android:fromDegrees="0"
<span style="color:#ff0000;">android:interpolator="@android:anim/overshoot_interpolator"</span>
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="-650" >
</rotate>
2、在代码中设置,即通过
Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha_exit); anim.setInterpolator(new AccelerateInterpolator()); //或者 AlphaAnimation alpha = new AlphaAnimation(0.0f, 1.0f); <span style="color:#ff0000;">alpha.setInterpolator(new AccelerateInterpolator());</span>
设置之后,再用相应控件启动已经具有插值器值的animation,即button.startAnimation(anim);这样就启动具有动画的控件了,该控件就具有了所设置的插值器中的动画了。
【注意】设置控件动画时候用代码写和用xml都可以,都可以有一样的效果,但是在用xml设置插值器值的时候,必须把插值器的值设置在xml文件的最外层的属性中,不然不会生效的,即:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
<span style="color:#ff0000;"> android:interpolator="@android:anim/bounce_interpolator"</span>>
<alpha
android:duration="1000"
android:fromAlpha="1.0"
android:interpolator="@android:anim/overshoot_interpolator"
android:toAlpha="0.0" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="true"
android:fromDegrees="0"
android:interpolator="@android:anim/overshoot_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="-650" >
</rotate>
所以这点一定要注意!!!
最后总结一下,动画效果和插值器效果,一般的控件能用代码写我推荐就是用代码写,少用xml写,因为代码写起来好方便,构造函数中就可以把属性的值设置完,除非只能通过setAnimationStyle()来设置动画的控件就用xml+styles来写。
请勿转载------------
Android之Animation动画的使用(一)的更多相关文章
- Android Property Animation动画
3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:property animation,这三 ...
- Android之Animation动画各属性的参数意思(二)
现在就来讲讲Animation里这四个标签的属性. 一.这四个标签alpha.scale.translate.rotate共有的属性为: android:duration 动画持续时间, ...
- android中Animation动画的连续播放与播放完毕后停留在最后的状态
我们做安卓应用的苦逼程序员们常常会需要用到Animation也就是动画.比如做地图功能的时候.我们在手机旋转时需要根据手机重力感应来调整地图的角度,让它上面的“北”一直指向地球的北面...好多人做动画 ...
- android 补间动画和Animation
介绍: 补间动画是一种设定动画开始状态.结束状态,其中间的变化由系统计算补充.这也是他叫做补间动画的原因. 补间动画由Animation类来实现具体效果,包括平移(TranslateAnimation ...
- 【Android 基础】Animation 动画介绍和实现
在前面PopupWindow 实现显示仿腾讯新闻底部弹出菜单有用到Animation动画效果来实现菜单的显示和隐藏,本文就来介绍下吧. 1.Animation 动画类型 Android的animati ...
- Android中xml设置Animation动画效果详解
在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...
- android中设置Animation 动画效果
在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...
- android Animation 动画效果介绍
Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动 ...
- Android Animation 动画属性
在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现: 一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...
随机推荐
- VK Cup 2017 - Round 2
FallDream打的AB都FFT了,只剩一个我打的C,没进前一百,之后看看马拉松复活赛有没机会呗. A. Voltage Keepsake 题目大意:n个东西,每个东西一开始有bi能源,每秒消耗ai ...
- NOIP2014-5-24模拟赛
Problem 1 护花(flower.cpp/c/pas) [题目描述] 约翰留下他的N(N<=100000)只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时 ...
- java的数据结构
常见的数据结构 线性表(list) 1.有序列表,就像小朋友排队(一队)放学出校门,插入的顺序作为遍历的顺序,位置不变(长度固定) 2.顺序存储:从起始位置开始依次向后存储,查询方便,但是插入(排队 ...
- 在 Mac OS X 上安装 TensorFlow
在 Mac OS X 上安装 TensorFlow 这个文档说明了如何在 Mac OS X 上安装 TensorFlow. 注意:从 1.2 版本开始,在 Mac OS X 上 TensorFlow ...
- 重新设置Eclipse的workspace路径
有3中方法可以更改workspace的路径设置: 1. 启动Eclipse/MyEclipse后, 打开"Window -> Preferences -> General -&g ...
- 数据结构之Trie树
1. 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. Trie一词来自retrieve,发音为/tr ...
- webpack 前后端分离开发接口调试解决方案,proxyTable解决方案
如果你有单独的后端开发服务器 API,并且希望在同域名下发送 API 请求 ,那么代理某些 URL 会很有用. dev-server 使用了非常强大的 http-proxy-middleware 包. ...
- substr函数用法详解
substr(string, start<,length>):从string的start位置开始提取字符串 length:要提取字符串的长度,若length为以下任意条件之一时,返回sta ...
- Splay伸展树入门(单点操作,区间维护)附例题模板
Pps:终于学会了伸展树的区间操作,做一个完整的总结,总结一下自己的伸展树的单点操作和区间维护,顺便给未来的自己总结复习用. splay是一种平衡树,[平均]操作复杂度O(nlogn).首先平衡树先是 ...
- Node.js 实用工具
稳定性: 4 - 锁定 这些函数都在'util' 模块里.使用 require('util') 来访问他们. util 模块原先设计的初衷是用来支持 node 的内部 API 的.这里的很多的函数对你 ...