博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android学习之Animation(一)
阅读量:6843 次
发布时间:2019-06-26

本文共 5128 字,大约阅读时间需要 17 分钟。

3.0以前,android支持两种动画模式,Tween Animation,Frame Animation,在android3.0中又引入了一个新的动画系统:Property Animation,这三种动画模式在SDK中被称为Property Animation,View Animation,Drawable Animation。

我今天要说的就是Tween Animation.要实现它有两种方式。

  • 通过代码控制
  • 通过xml文件进行控制(推荐)

代码控制


大致的步骤是这样的:

  • 先定义一个AnimationSet,用来“盛装”我们的Animation。
  • 然后是创建相应的Animation(android中可以创建的Animation有四种,分别是AlphaAnimation,ScaleAnimation,TransAnimation以及RotateAnimation)。
  • 然后根据帮助文档进行参数的设置就可以了
  • 最后将设置好的Animation添加到AnimationSet中,就可以应用了。

下面是一个简单的代码:

package com.summer.animationutils;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.AlphaAnimation;import android.view.animation.Animation;import android.view.animation.AnimationSet;import android.view.animation.RotateAnimation;import android.view.animation.ScaleAnimation;import android.view.animation.TranslateAnimation;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity {
private Button button_rotate,button_alpha,button_translate,button_scale; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView=(ImageView) findViewById(R.id.imageview1); button_rotate=(Button) findViewById(R.id.button_rotate); button_alpha=(Button) findViewById(R.id.button_alpha); button_translate=(Button) findViewById(R.id.button_translate); button_scale=(Button) findViewById(R.id.button_scale); button_rotate.setOnClickListener(new RotateAnimationListener()); button_alpha.setOnClickListener(new AlphaAnimationListener()); button_translate.setOnClickListener(new TranslateAnimationListener()); button_scale.setOnClickListener(new ScaleAnimationListener()); } class RotateAnimationListener implements OnClickListener{
@Override public void onClick(View arg0) { // TODO Auto-generated method stub AnimationSet animationSet=new AnimationSet(true); RotateAnimation rotateAnimation=new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotateAnimation.setDuration(1500); animationSet.addAnimation(rotateAnimation); imageView.startAnimation(animationSet); } } class AlphaAnimationListener implements OnClickListener{
@Override public void onClick(View arg0) { // TODO Auto-generated method stub AnimationSet animationSet=new AnimationSet(true); AlphaAnimation alphaAnimation=new AlphaAnimation(1,0); alphaAnimation.setDuration(1500); animationSet.addAnimation(alphaAnimation); imageView.startAnimation(animationSet); } } class TranslateAnimationListener implements OnClickListener{
@Override public void onClick(View arg0) { // TODO Auto-generated method stub AnimationSet animationSet=new AnimationSet(true); TranslateAnimation translateAnimation=new TranslateAnimation( Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0f, Animation.RELATIVE_TO_SELF,1.0f); translateAnimation.setDuration(1500); animationSet.addAnimation(translateAnimation); imageView.startAnimation(animationSet); } } class ScaleAnimationListener implements OnClickListener{
@Override public void onClick(View arg0) { // TODO Auto-generated method stub AnimationSet animationSet=new AnimationSet(true); ScaleAnimation scaleAnimation=new ScaleAnimation(1,0.1f,1,0.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scaleAnimation.setDuration(1500); animationSet.addAnimation(scaleAnimation); imageView.startAnimation(animationSet); } }}

小总结:

  • 代码比较简单,就不再一一的进行说明了。
  • 在AnimationSet中可以添加多个Animtion,实现不同的动画效果的叠加。
  • 对于AnimationSet的属性的设置可以全部映射到其内部的所有的动画中。

通过XML文件控制


大致的步骤如下:

  • 在res目录下创建一个anim的文件夹(名称不必拘泥于这一个)
  • 在anim文件夹下创建一个xml文件(以set标签内嵌套alpha,rotate,scale,translate等子标签的方式设置动画效果)
  • 然后在使用到动画效果的地方用相关代码进行添加即可。(稍后详述)

下面是我的一个动画文件示例分解:

如alpha.xml。简单明了清晰

再看rotate.xml文件,其中pivotX属性的值分别代表着三种不同的情况(当然其他的属性值也是有这个情况滴)

  • android:pivotX=”60”;//绝对位置定位
  • android:pivotX=”60%”;//相对于控件自身的比例定位
  • android:pivotX=”60%p”;//相对于父控件的比例定位

再看translate.xml

最后是scale.xml.


完成了xml动画文件的设置,下一步当然是要进行使用了,否则要它做什么,我们可以使用下慢的代码来进行动画的使用。

Animation animation=(Animation) AnimationUtils.loadAnimation(MainActivity.this,                    R.anim.scale);imageView.startAnimation(animation);

同样的,其他的动画也可以这么做。


偷偷的告诉你,可以在一个xml文件中同时设置好几个子标签,来完成好几个动画的叠加效果哦。(即如果想要共享一个Interpolator的话,需要将android:shareInterpolator的值设置为true)。至于什么是Interpalotor,就是android自带的一些动画的效果。

转载地址:http://nuvul.baihongyu.com/

你可能感兴趣的文章
AngularJS $watch 监听
查看>>
开启SharePoint Server 2013 中的“微博”功能——新闻源
查看>>
Spring注解@Component、@Repository、@Service、@Controller区别 .
查看>>
ACM-ICPC北京赛区2017网络同步赛
查看>>
天才们为什么独身一世?
查看>>
Exchange 2013 OWA搜索邮件失败问题处理
查看>>
linux系统计算从1加到100之和思路风暴
查看>>
Skype for Business Server 2015-12-WAP-发布-1-前端服务器-OWAS01
查看>>
下一代RDS技术预览版RemoteFX实测体验
查看>>
Oracle体系结构
查看>>
高性能的MySQL(3)单条查询问题还是服务器问题
查看>>
NSIS x64 位系统下安装
查看>>
VMware vSphere虚拟机文件介绍
查看>>
高性能的MySQL(5)创建高性能的索引一B-Tree索引
查看>>
RHEL6网络相关配置
查看>>
RHEL6.3配置文件共享(4) Samba服务之二
查看>>
Cookie和JS购物车的简单实例
查看>>
Exchange-清理AD上残留Exchange信息
查看>>
持续集成之 Jenkins+Gitlab 打包发布程序到 Tomcat(二)
查看>>
SQL SERVER SQLOS的任务调度
查看>>