我们在使用一些控件时候,难免会设置一些进入和退出的动画效果,比如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. 在Linux(ubuntu 14.04)上部署WeX5跨平台App(HTML5)

    1. 前言   这篇文章讲述的是把毕业设计的用 WeX5 开发的项目部署到阿里云的Linux(ubuntu14.04)上,本来可以部署在WeX5自带的服务器上,但是WeX5的服务器我以前部署的项目突然 ...

  2. [Luogu 3810]三维偏序

    Description 有 $ n $ 个元素,第 $ i $ 个元素有 $ a_i $ .$ b_i $ .$ c_i $ 三个属性,设 $ f(i) $ 表示满足 $ a_j \leq a_i $ ...

  3. [ZJOI2010]数字计数

    题目描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入输出格式 输入格式: 输入文件中仅包含一行两个整数a.b,含义如上所述. 输出格式: 输出文件 ...

  4. [Sdoi2009]Elaxia的路线

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...

  5. [HNOI2004]敲砖块

    题目描述 在一个凹槽中放置了 n 层砖块.最上面的一层有n 块砖,从上到下每层依次减少一块砖.每块砖 都有一个分值,敲掉这块砖就能得到相应的分值,如下图所示. 14 15 4 3 23 33 33 7 ...

  6. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. hdu 5591 BestCoder Round #65(博弈)

    题意: 问题描述 ZYBZYB在远足中,和同学们玩了一个“数字炸弹”游戏:由主持人心里想一个在[1,N][1,N]中的数字XX,然后玩家们轮流猜一个数字,如果一个玩家恰好猜中XX则算负,否则主持人将告 ...

  8. bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法

    4559: [JLoi2016]成绩比较 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 261  Solved: 165[Submit][Status ...

  9. django-rest-framework 注意事项

    注意事项: 在使用django rest framework时候由于网上资料太多,出现了 由一下两个函数导致的问题: from django.views.decorators.csrf import ...

  10. Python【第四课】 模块 and 包

    本篇内容 模块基础和导入(import,from...import...) 包常识和导入(import,from...import...) 函数式第一类对象 1.模块基础和导入 1.1 模块认识 什么 ...