前言

Android动画是android开发中非常重要的一部分,现在越来越多的产品都加入了各种酷炫的动画,作为一名Android小码农,学习Android的动画是必不可少的。

Android给我们提供了几种类型的动画:Tween动画,Frame动画,Property动画,这篇文章先介绍前两种比较简单的。

一. Tween动画

Tween动画可以对对象进行缩小,放大,旋转,渐变,位移等操作,针对这不同的操作,Android提供了相应的接口,如下图。

Android动画基础-Tween和Frame动画_第1张图片

AlphaAnimation:实现渐入渐出的动画,比较常用的构造方法是:AlphaAnimation(float fromAlpha, float toAlpha),两个参数分别是开始时和结束时的透明度,范围是0f-1.0f。

ScaleAnimation:缩放动画,常用的构造方法:ScaleAnimation(float fromX, float toX, float fromY, float toY),参数分别表示动画开始和结束时x和y轴的缩放比例。

RotateAnimation:旋转动画,常用构造方法:RotateAnimation(float fromDegrees, float toDegrees),参数表示旋转开始和结束时角度。

TranslateAnimation:位移动画,常用构造方法:TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta),表示动画开始和结束时x,y坐标。

AnimationSet:动画的集合,可以包含多个动画,可以通过给每个动画设置启动时间(用setStartOffset方法),来决定这几个动画的执行顺序。

下面通过一个很简单的例子,看一下他们的用法,布局中只有一张图片,给这张图片分别添加这几个动画:

private ImageView mImageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mImageView = (ImageView) findViewById(R.id.image);        AlphaAnimation alpha = new AlphaAnimation(0.2f,1.0f);        alpha.setDuration(3000);//设置动画执行时间//        mImageView.startAnimation(alpha);        ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f,1.0f,0.5f,1.0f);        scaleAnimation.setDuration(3000);        scaleAnimation.setStartOffset(3000);//设置动画开始的时间//        mImageView.startAnimation(scaleAnimation);        RotateAnimation rotateAnimation = new RotateAnimation(360f,0f);        rotateAnimation.setDuration(3000);        rotateAnimation.setStartOffset(6000);//        rotateAnimation.setRepeatCount(5);//设置动画执行次数//        mImageView.startAnimation(rotateAnimation);        TranslateAnimation translateAnimation = new TranslateAnimation(100f,0f,0f,100f);        translateAnimation.setDuration(3000);        translateAnimation.setStartOffset(9000);//        mImageView.startAnimation(translateAnimation);                AnimationSet set = new AnimationSet(true);        set.addAnimation(alpha);        set.addAnimation(scaleAnimation);        set.addAnimation(rotateAnimation);        set.addAnimation(translateAnimation);        mImageView.startAnimation(set);    }}

同时,我们也可以在xml中定义动画,我这里定义了一个缩放动画,在res/anim/目录下,创建scal_anim.xml:

<?xml version="1.0" encoding="utf-8"?>    
在代码中对ImageView使用此动画,通过AnimationUtils的loadAnimator方法创建出Animation:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale_anim);mImageView.startAnimation(animation);

xml的最外层是set,相当于动画的集合,它里面是可以定义多个动画的。


二. Frame动画

Frame动画是一系列图片按照顺序展示的,像gif图一样,也被称作逐帧动画,它的实现方式也非常简单,可以定义在xml中,在res/anim/目录下创建一个frame_anim.xml文件:

<?xml version="1.0" encoding="utf-8"?>            
xml中必须以animation-list作为根元素,里面包含一个或多个item,其中,oneshot属性,表示动画执行的次数,true表示只执行一遍,false表示无限循环。每个item的drawable属性表示这一帧显示的图片,duration表示这一帧持续的时间。

这里同样将此动画应用到一个ImageView上,布局文件如下:

    
应用此动画的时候用到AnimationDrawable类,官方文档对这个类的描述是:
An object used to create frame-by-frame animations, defined by a series of Drawable objects, which can be used as a View object's background.
它就是用来创建帧动画的,这个动画可以当作一个view的背景,java代码如下:
AnimationDrawable animation = (AnimationDrawable) mImageView.getBackground();animation.start();

总结,这两种动画都是比较简单,而且也有一些局限性,例如,Tween动画,给人看着它在变幻,但是view的位置时没有变的,在这个view上的响应还在原来的位置,还有一些3d的旋转动画,都很难实现,不过,Android还提供了Property Animation,属性动画。

更多相关文章

  1. Android Cannas.drawTextView 方法坐标问题
  2. Android开机自启动程序设置及控制方法
  3. Android随笔之——Android时间、日期相关类和方法
  4. Android NFC开发(二)——Android世界里的NFC所具备的条件以及使用
  5. Kernel.org 被黑,获取 Android 源码方法一则
  6. 关于android连续点击出现多个Activity界面的解决方法
  7. 58同城android客户端手机号码解密方法
  8. android 开发使用 kotlin 进行点击事件监听和界面跳转,直接传也方

随机推荐

  1. Android(安卓)Wear 进阶 5 Creating Watc
  2. Android(安卓)加载图片并存放在缓存中
  3. Android(安卓)手机验证码输入框
  4. android 滑动动画效果
  5. How to crop large photos with Android(
  6. Android(安卓)ViewPager实现左右滑动翻页
  7. Android(安卓)代码监控apk安装,卸载,替换
  8. Android(安卓)创建没有标题栏的对话框
  9. android 写入data/data/包名/file/中
  10. Android配置gradle 阿里云镜像