android tween动画平移怎么设置时间,Android 动画解析(二) 补间动画(Tween Animation)

上篇文章简单描述了有关如何实现逐帧动画(Frame Animation),如何还未了解逐帧动画(Frame Animation),可以先看看 Android 动画解析(一) 逐帧动画(Frame Animation)。今天这篇文章就来描述补间动画(Tween Animation)。

补间动画(Tween Animation) 也称为 View 动画

原理:通过对场景里的对象做图形变化来产生一种动画效果,主要包括四种效果:平移(translate)、旋转(rotate)、缩放(scale)和透明(alpha)。实际作用的View位置,大小等不会跟随变化。

PS:补间动画(Tween Animation) ,只是改变了View的显示效果而已,而不会真正去改变View的属性,例如View位置,大小等不会跟随变化。

实现补间动画(Tween Animation) 有两种方式,一种在xml中定义动画,另一种是直接使用动画对象。下面分别介绍具体如何实现。

一、使用xml文件实现补间动画(Tween Animation)。

1. 在/res/anim目录下,新建xml文件,文件名可以作为资源ID被引用。如果不存在anim目录,那么请手动创建。对应xml文件的根节点:alpha,translate,scale,rotate以及组合set。通过AnimationUtils的loadAnimation方法加载。

(1). 平移(translate)动画。

在/res/anim目录下,新建translate.xml文件,添加如下代码,

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:fromXDelta="0"

android:toXDelta="200"

android:fromYDelta="0"

android:toYDelta="200"

android:duration="2000"/>

标签标示平移动画,它可以是View在水平或者竖直方向完成平移的动画效果。

属性说明:

fromXDelta:动画开始的X坐标;

toXDelta:动画结束的X坐标;

fromYDelta:动画开始的Y坐标;

toYDelta:动画结束的Y坐标;

以上这4种属性的取值

PS: 如果以浮点数字表示,是一个绝对值,代表相对自身原始位置的像素值;

如果以num%表示,代表相对于自己的百分比,比如toXDelta定义为100%就表示在X方向上移动自己的1倍距离

如果以num%p表示,代表相对于父类组件的百分比。

duration: 动画的持续时间;

PS:

android:interpolator   动画的插值器或者渲染器,被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。android:interpolator 属性相当于物理中的变速加速度的概念。

android:fillAfter="true" // 是否停留在结束位置

接着需要在Activity中设置引用该动画,方法比较简单,具体如下所示,

private void translateAnim(View view) {

Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate);

view.setAnimation(animation);

}

至此,该动画就设置完毕了!运行看效果吧!

效果截图如下,

915b88f133bac14e31d42c2d5dfe1f29.gif

(2). 旋转(rotate)动画。

在/res/anim目录下,新建rotate.xml文件,添加如下代码,

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:fromDegrees="0"

android:toDegrees="360"

android:duration="2000"

android:repeatCount="1"

android:repeatMode="reverse"

android:pivotX="1"

android:pivotY="1"

/>

标签标示旋转动画,它可以使View具有旋转的动画效果。

属性说明:

fromDegrees: 旋转开始角度;

toDegrees: 旋转结束角度;

浮点值,单位:度 ;

repeatCount:旋转的次数 默认值是0 代表旋转1次 如果值是repeatCount=4 旋转5次,值为-1或者infinite时,表示该动画一直循环,永不停止。

pivotX: 旋转轴点X坐标;

pivotY: 旋转轴点Y坐标;

这两个属性有三种表示方式,数字方式代表相对于自身左边缘的像素值,num%方式代表相对于自身左边缘或顶边缘的百分比,num%p方式代表相对于父容器的左边缘或顶边缘的百分比。

这里有旋转轴点,View是围绕着抽点进行旋转的。默认情况下,旋转轴点是View的中心点。

接着需要在Activity中设置引用该动画,方法比较简单,具体如下所示,

private void rotateAnim(View view) {

Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate);

view.setAnimation(animation);

}

运行,效果截图如下,

dfc8fec626131e66c135a573fa6acdd8.gif

(3). 缩放(scale)。

在/res/anim目录下,新建scale.xml文件,添加如下代码,

android:interpolator="@android:anim/accelerate_interpolator"

android:fromXScale="0.2"

android:toXScale="1.5"

android:fromYScale="0.2"

android:toYScale="1.5"

android:pivotX="50%"

android:pivotY="50%"

android:duration="2000"/>

标签标示缩放动画,它可以使View具有放大或缩小的效果。

属性说明:

fromXScale: 沿着x轴缩放的起始比例;

toXScale: 沿着x轴缩放的结束比例;

fromYScale: 沿着y轴缩放的起始比例;

toYScale: 沿着y轴缩放的结束比例;

pivotX: 缩放轴点X坐标;

pivotY: 缩放轴点Y坐标

duration: 动画的持续时间;

这里有轴点,默认情况下,轴点是View的中心点,这个时候在水平方向进行缩放的话会导致View向左右两个方向同时进行缩放,但是把轴点设置View的右边界,那么View就只会向左边进行缩放,反之则向右边进行缩放。

接着需要在Activity中设置引用该动画,方法比较简单,具体如下所示,

private void scaleAnim(View view) {

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

view.setAnimation(animation);

}运行,效果截图如下,

fcef710ec1964f2f0ccc781a26ae912d.gif

(4).透明(alpha)。

在/res/anim目录下,新建scale.xml文件,添加如下代码,

android:interpolator="@android:anim/accelerate_decelerate_interpolator"

android:fromAlpha="1.0"

android:toAlpha="0.1"

android:duration="2000"/>

标签标示透明度动画,它可以改变View的透明度。

属性说明:

fromAlpha :起始透明度;

toAlpha:结束透明度;

1.0表示完全不透明

0.0表示完全透明

duration: 动画的持续时间接着需要在Activity中设置引用该动画,方法比较简单,具体如下所示,

private void alphaAnim(View view) {

Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);

view.setAnimation(animation);

}

运行,效果截图如下,

37e438f54de11e601b33a8a0e8f31873.gif

(5). 动画集合。

我们也可以在一个xml文件中,集合好几种动画。

在/res/anim目录下,新建anim.xml文件,添加如下代码,

android:duration="5000"

android:interpolator="@android:anim/accelerate_interpolator"

android:shareInterpolator="true" >

android:fromAlpha="0.0"

android:toAlpha="1.0" />

android:fromXDelta="0"

android:toXDelta="200"

android:fromYDelta="0"

android:toYDelta="200"/>

android:fromXScale="0.2"

android:toXScale="1"

android:fromYScale="0.2"

android:toYScale="1"

android:pivotX="1"

android:pivotY="1"/>

android:fromDegrees="0"

android:toDegrees="360"

android:duration="2000"

android:repeatCount="5"

android:pivotX="50%"

android:pivotY="50%"/>

标签标示动画集合,它可以包含若干个动画,并且它的内部也是可以嵌套其他动画集合的。

android:shareInterpolator:表示集合中的动画是否共享同一个插值器,如果集合不指定插值器,那么子动画需要单独指定所需的插值器或者使用默认值。

android:interpolator:插值器

接着需要在Activity中设置引用该动画,方法比较简单,具体如下所示,

private void anim(View view) {

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

view.setAnimation(animation);

}运行,效果截图如下,

9f4643416d6c87db2a5de05b71971b3d.gif

二、使用代码(动画类)实现补间动画(Tween Animation)。

(1). 平移(translate)动画。

使用 TranslateAnimation实现。创建一个TranslateAnimation对象,

public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)参数说明:

fromXDelta 起始点的X坐标

toXDelta 结束点的X坐标

fromYDelta 起始点的Y坐标

toYDelta 结束点的Y坐标

具体创建代码如下,

private void setTranslateAnim(View view) {

//定义一个位移补间动画

TranslateAnimation translateAnimation = new TranslateAnimation(0, 200, 0, 200);

//设置动画结束后效果保留

translateAnimation.setFillAfter(false);

//设置动画持续时间

translateAnimation.setDuration(2000);

//开启动画

view.startAnimation(translateAnimation);

}

并且还可以设置 插值器,

//控制动画先慢后快

translate.setInterpolator(new AccelerateInterpolator());运行效果和使用xml是一致的!自己可以动手试试!

(2). 旋转(rotate)动画。

使用 RotateAnimation实现。创建一个RotateAnimation对象,

public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY) {参数说明:

fromDegrees: 旋转起始的角度

toDegrees: 旋转结束的角度

pivotX: 旋转轴的X坐标

pivotY: 旋转轴的Y坐标

具体创建代码如下,

private void setRotateAnim(View view) {

//定义一个旋转补间动画

RotateAnimation rotateAnimation = new RotateAnimation(0,360, 1, 1);

//设置动画结束后效果保留

rotateAnimation.setFillAfter(false);

//设置动画持续时间

rotateAnimation.setDuration(2000);

//设置动画的重复次数

rotateAnimation.setRepeatCount(5);

//开启动画

view.startAnimation(rotateAnimation);

}

运行效果和使用xml是一致的!自己可以动手试试哦!

(3). 缩放(scale)。

使用 ScaleAnimation实现。创建一个ScaleAnimation对象,

public ScaleAnimation(float fromX, float toX, float fromY, float toY)参数说明:

fromX: 起始点的X坐标;

toX: 结束点的X坐标;

fromY: 起始点的Y坐标;

toY: 结束点的Y坐标

具体创建代码如下,

private void setScaleAnim(View view) {

//定义一个缩放补间动画

ScaleAnimation scaleAnimation = new ScaleAnimation(0.1f,1.2f, 0.2f, 1.2f);

//设置动画结束后效果保留

scaleAnimation.setFillAfter(false);

//设置动画持续时间

scaleAnimation.setDuration(2000);

//设置动画的重复次数

scaleAnimation.setRepeatCount(5);

//开启动画

view.startAnimation(scaleAnimation);

}

运行效果和使用xml是一致的!自己动手试试哦!

(4).透明(alpha)。

使用 AlphaAnimation实现。创建一个AlphaAnimation对象,

public AlphaAnimation(float fromAlpha, float toAlpha)参数说明:

fromAlpha 起始透明度

toAlpha 结束透明度具体创建代码如下,

private void setAlphaAnim(View view) {

//定义一个缩放补间动画

AlphaAnimation alphaAnimation = new AlphaAnimation(0,1f);

//设置动画结束后效果保留

alphaAnimation.setFillAfter(false);

//设置动画持续时间

alphaAnimation.setDuration(2000);

//设置动画的重复次数

alphaAnimation.setRepeatCount(5);

//开启动画

view.startAnimation(alphaAnimation);

}

运行效果和使用xml是一致的!动手试试吧!

(5). 动画集合。

使用 AnimationSet实现。创建一个AnimationSet对象,将各种动画对象加入到该AnimationSet对象中。例如

private void setAnim(View view){

AnimationSet animationSet=new AnimationSet(true);

//定义一个旋转补间动画

RotateAnimation translate = new RotateAnimation(0,360, 1, 1);

//设置动画持续时间

translate.setDuration(2000);

animationSet.addAnimation(translate);

ScaleAnimation scale = new ScaleAnimation(0.1f,1.2f, 0.2f, 1.2f);

scale.setDuration(1000);

animationSet.addAnimation(scale);

//定义一个旋转补间动画

RotateAnimation rotate = new RotateAnimation(0,360, 1, 1);

//设置动画持续时间

rotate.setDuration(2000);

animationSet.addAnimation(rotate);

view.setAnimation(animationSet);

}

效果是各种动画的额集合!你还不动手试试!

三、总结。

1. Animation属性小结如下:

d44f95f09034616fb2d72a38512b196a.png

所有的补间动画都具备这些属性,可以任意设置。

2. repeatCount 重复的次数,默认为0,必须是int,可以为-1表示不停止。

3. repeatMode 重复的模式,默认为restart,即重头开始重新运行,可以为reverse即从结束开始向前重新运行。在android:repeatCount大于0或为infinite时生效 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值