我们在使用一些控件时候,难免会设置一些进入和退出的动画效果,比如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动画的使用(一)的更多相关文章

  1. Android Property Animation动画

    3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中又引入了一个新的动画系统:property animation,这三 ...

  2. Android之Animation动画各属性的参数意思(二)

    现在就来讲讲Animation里这四个标签的属性. 一.这四个标签alpha.scale.translate.rotate共有的属性为: android:duration        动画持续时间, ...

  3. android中Animation动画的连续播放与播放完毕后停留在最后的状态

    我们做安卓应用的苦逼程序员们常常会需要用到Animation也就是动画.比如做地图功能的时候.我们在手机旋转时需要根据手机重力感应来调整地图的角度,让它上面的“北”一直指向地球的北面...好多人做动画 ...

  4. android 补间动画和Animation

    介绍: 补间动画是一种设定动画开始状态.结束状态,其中间的变化由系统计算补充.这也是他叫做补间动画的原因. 补间动画由Animation类来实现具体效果,包括平移(TranslateAnimation ...

  5. 【Android 基础】Animation 动画介绍和实现

    在前面PopupWindow 实现显示仿腾讯新闻底部弹出菜单有用到Animation动画效果来实现菜单的显示和隐藏,本文就来介绍下吧. 1.Animation 动画类型 Android的animati ...

  6. Android中xml设置Animation动画效果详解

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

  7. android中设置Animation 动画效果

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

  8. android Animation 动画效果介绍

    Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动 ...

  9. Android Animation 动画属性

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现: 一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

随机推荐

  1. 机器学习技法:09 Decision Tree

    Roadmap Decision Tree Hypothesis Decision Tree Algorithm Decision Tree Heuristics in C&RT Decisi ...

  2. python爬虫——爬取小说 | 探索白子画和花千骨的爱恨情仇(转载)

    转载出处:药少敏   ,感谢原作者清晰的讲解思路! 下述代码是我通过自己互联网搜索和拜读完此篇文章之后写出的具有同样效果的爬虫代码: from bs4 import BeautifulSoup imp ...

  3. [HNOI 2011]XOR和路径

    Description 给定一个无向连通图,其节点编号为 1 到 N,其边的权值为非负整数.试求出一条从 1 号节点到 N 号节点的路径,使得该路径上经过的边的权值的“XOR 和”最大.该路径可以重复 ...

  4. 【NOIP2013TG】solution

    链接:https://www.luogu.org/problem/lists?name=&orderitem=pid&tag=83%2C30 D1T1:转圈游戏(circle) 题意: ...

  5. ●BZOJ 4556 [Tjoi2016&Heoi2016]字符串

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4556 题解: 巨恶心...但是题很好呀,可以练习好几个比较麻烦的算法~ 1).预处理 首先用 ...

  6. 2014-10-30NOIP复习题1

    Problem 1 Graph (graph.cpp/c/pas) [题目描述] 给出 N 个点,M 条边的有向图,对于每个点 v,求 A(v) 表示从点 v 出发,能到达的编号最大的点. [输入格式 ...

  7. 【HDU 2966 k-dimensional Tree 入个门】

    ·“k-d树是一种分割k维数据空间的数据结构.主要应用于多维空间关键数据的范围搜索和最近邻搜索……”’'   ·英文题,述大意:      给出平面内n个点(n<=100000,0<=x, ...

  8. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】

    转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...

  9. 锐捷Linux版的下载和使用(福大客户端)

    下载锐捷程序包 点此下载 没有连接到锐捷里就进不了这个安装包的官方下载界面(好矛盾啊这个),所以我把它上传到博客园了. 解压文件 schaepher:~$ cd Downloads/ schaephe ...

  10. bash的工作特性及其使用方法

    bash的工作特性之命令执行状态返回值和命令展开所涉及的内容及其示例演出 !脚本执行与调试1.绝对路径执行,要求文件有执行权限2.以sh命令执行,不要求文件有执行权限3..加空格或source命令执行 ...