文档章节

android 动画汇总-Tween动画

蜗牛崛起
 蜗牛崛起
发布于 2017/01/04 17:21
字数 1530
阅读 7
收藏 0

补间(Tween)动画通过XML或Android代码定义,建议使用XML文件定义,因为它更具可读性、可重用性。

概述

Tween动画分为AlphaAnimation(渐变透明度动画)、RotateAnimation(旋转动画)、ScaleAnimation(伸缩动画)、TranslateAnimation(平移动画)、AnimationSet(动画容器),分别对应放置在res/anim/目录下xml文件的标签为<alpha>、<rotate>、<scale> 、<translate> 、<set> ,这些类都继承抽象类Animation。

详细说明

以下是补间动画的共有属性,无论哪种补间动画,都可以设置使用这些属性中的一个或多个。

输入图片说明

那接下来我们就看看每种补间动画特有的一些属性说明吧。

输入图片说明

输入图片说明

输入图片说明

输入图片说明

2-2-6 AnimationSet详解

AnimationSet继承自Animation,是上面四种的组合容器管理类,没有自己特有的属性,他的属性继承自Animation,所以特别注意,当我们对set标签使用Animation的属性时会对该标签下的所有子控件都产生影响。

补间动画使用方法

  • (一) xml方式 (补间动画的模板)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"   //属性为动画起始时透明度   0.0表示完全透明  1.0表示完全不透明
        android:toAlpha="float" />  //	属性为动画结束时透明度
    <scale
        android:fromXScale="float"   // 0.0 收缩到没有  1.0 无伸缩  <1.0表示收缩  >1.0表示放大
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"    //从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"   //当角度为负数——表示逆时针旋转  当角度为正数——表示顺时针旋转
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>
 

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

至于补间动画的使用,Animation还有如下一些比较实用的方法介绍:

  1. reset() 重置Animation的初始化;
  2. cancel() 取消Animation动画;
  3. start() 开始Animation动画;
  4. setAnimationListener(AnimationListener listener) 给当前Animation设置动画监听;
  5. hasStarted() 判断当前Animation是否开始;
  6. hasEnded() 判断当前Animation是否结束;

既然补间动画只能给View使用,那就来看看View中和动画相关的几个常用方法吧,如下:

  1. startAnimation(Animation animation) 对当前View开始设置的Animation动画;
  2. clearAnimation() 取消当View在执行的Animation动画;
  • (二)java方式
  1. AlphaAnimation
Animation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);  //第一个参数fromAlpha表示动画起始时的透明度, 第二个参数toAlpha表示动画结束时的透明度。
alphaAnimation.setDuration(3000);  //设置动画时间    
this.startAnimation(alphaAnimation);  
  1. RotateAnimation
Animation rotateAnimation = new RotateAnimation(0f, 360f);  //第一个参数fromDegrees表示动画起始时的角度, 第二个参数toDegrees表示动画结束时的角度
                rotateAnimation.setDuration(1000);  
                this.startAnimation(rotateAnimation); 
//另外还可以设置伸缩模式pivotXType、pivotYType, 伸缩动画相对于x,y 坐标的开始位置pivotXValue、pivotYValue等。
  1. ScaleAnimation
Animation scaleAnimation = new ScaleAnimation(0.1f, 1.0f,0.1f,1.0f);  
scaleAnimation.setDuration(500);  
 this.startAnimation(scaleAnimation); 

//第一个参数fromX ,第二个参数toX:分别是动画起始、结束时X坐标上的伸缩尺寸。
第三个参数fromY ,第四个参数toY:分别是动画起始、结束时Y坐标上的伸缩尺寸。
另外还可以设置伸缩模式pivotXType、pivotYType, 伸缩动画相对于x,y 坐标的开始位置pivotXValue、pivotYValue等。
  1. TranslateAnimation
Animation translateAnimation = new TranslateAnimation(0.1f, 100.0f,0.1f,100.0f);  
 translateAnimation.setDuration(1000);  
 this.startAnimation(translateAnimation);  
//第一个参数fromXDelta ,第二个参数toXDelta:分别是动画起始、结束时X坐标。
第三个参数fromYDelta ,第四个参数toYDelta:分别是动画起始、结束时Y坐标。
  1. AnimationSet
//初始化 Translate动画  
translateAnimation = new TranslateAnimation(0.1f, 100.0f,0.1f,100.0f);  
//初始化 Alpha动画  
alphaAnimation = new AlphaAnimation(0.1f, 1.0f);  
  
//动画集  
AnimationSet set = new AnimationSet(true);  
set.addAnimation(translateAnimation);  
set.addAnimation(alphaAnimation);  
  
//设置动画时间 (作用到每个动画)  
set.setDuration(1000);  
this.startAnimation(set); 

补间动画Interpolator插值器详解

以下各种插值器都是实现了Interpolator接口

输入图片说明

  • 插值器使用方法

插值器的使用比较简答,如下:

<set android:interpolator="[@android](https://my.oschina.net/asia):anim/accelerate_interpolator"> ... </set>

  • 插值器的自定义

有时候你会发现系统提供的插值器不够用,可能就像View一样需要自定义。关于插值器的自定义分为两种实现方式,xml自定义实现(其实就是对现有的插值器的一些属性修改)或者java代码实现方式。

先看看XML自定义插值器的步骤:

  1. 在res/anim/目录下创建filename.xml文件。
  2. 修改你准备自定义的插值器如下:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />
  1. 在你的补间动画文件中引用该文件即可。

可以看见上面第二步修改的是现有插值器的一些属性,但是有些插值器却不具备修改属性,具体如下:

<accelerateDecelerateInterpolator>

无可自定义的attribute。

<accelerateInterpolator>

android:factor 浮点值,加速速率(默认值为1)。

<anticipateInterploator>

android:tension 浮点值,起始点后拉的张力数(默认值为2)。

<anticipateOvershootInterpolator>

android:tension 浮点值,起始点后拉的张力数(默认值为2)。 
android:extraTension 浮点值,拉力的倍数(默认值为1.5)。

<bounceInterpolator>

无可自定义的attribute。

<cycleInterplolator>

android:cycles 整形,循环的个数(默认为1)。

<decelerateInterpolator>

android:factor 浮点值,减速的速率(默认为1)。

<linearInterpolator>

无可自定义的attribute。

<overshootInterpolator>

android:tension 浮点值,超出终点后的张力(默认为2)。

再来看看Java自定义插值器的(Java自定义插值器其实是xml自定义的升级,也就是说如果我们修改xml的属性还不能满足需求,那就可以选择通过Java来实现)方式。

上面所有的Interpolator都实现了Interpolator接口,而Interpolator接口又继承自 TimeInterpolator,TimeInterpolator接口定义了一个float getInterpolation(float input);方法,这个方法是由系统调用的,其中的参数input代表动画的时间,在0和1之间,也就是开始和结束之间。

如下就是一个动画始末速率较慢、中间加速的AccelerateDecelerateInterpolator插值器:

public class AccelerateDecelerateInterpolator extends BaseInterpolator
        implements NativeInterpolatorFactory {

    public float getInterpolation(float input) {
        return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
   
}

© 著作权归作者所有

共有 人打赏支持
蜗牛崛起
粉丝 3
博文 127
码字总数 63547
作品 0
东城
程序员
私信 提问
android---动画入门(一)

android 动画分为两类,View Animation(视图动画)和property Animation(属性动画),View Animation(视图动画)包含了Tween Animation和Frame Animation, property Animation包含Value Animation......

俠客~
02/21
0
0
Android游戏开发之Tween动画的实现(三十二)

Android游戏开发之Tween动画的实现 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6747877 今天和大伙讨论一下Android...

晨曦之光
2012/03/07
549
0
Android游戏开发之Tween动画的实现(三十二)

Android游戏开发之Tween动画的实现 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6747877 今天和大伙讨论一下Android...

彭博
2012/03/09
395
0
Android 平滑和立体翻页效果1

Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述 Android 的动画框架是如何实现的。任何一个框架都有其优势和局限性,只有明白了其实现原理...

紫地瓜
2012/10/25
0
4
Android animation 学习

关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画...

所属暮雪
2014/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
1
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
4
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部