android 之动画

动画:

一、帧动画

res\drawable

Drawable动画

使用的类:AnimationDrawable

常用方法:

start:启动

stop:停止

isRunning:是否正在运行

将指定的一系列图片,按照顺序进行切换,类似Gif

使用步骤:

1、准备资源图片

2、在res\drawable\下创建

3、使用进行图片显示顺序的设置和停留时间的设置

4、在对应的ImageView中使用background引用刚刚的

5、在对应的Activity中使用AnimationDrawable的start启动动画

二、补间动画

View动画

res\anim

使用的类:Animation和AnimationUtils

通过设置图片的透明度、平移、缩放、旋转等实现动画的效果

使用方式:

1、XML方式

使用步骤:

1、在res文件夹下创建anim文件夹,用于存储动画效果

2、在anim下创建对应的动画效果

1、alpha:透明度

常用属性:

fromAlpha:起始的透明度

toAlpha:终止的透明度

duration:动画的持续时间,单位毫秒

注:透明度范围:0.0-1.0,其中0.0完全透明、1.0完全显示

2、rotate旋转

常用属性:

fromDegrees:起始角度

toDegrees:终止角度

pivotX:中心点的x坐标

pivotY:中心点的y坐标

repeatCount:重复的次数

repeatMode:重复的模式

interpolator:加速效果

3、translate:平移

常用属性:

fromXDelta:设置起始的x坐标

toXDelta:终止的x坐标

fromYDelta:起始的y坐标

toYDelta:终止的y坐标

repeatCount:重复的次数

repeatMode:重复的模式

interpolator:加速效果

4、scale:设置缩放效果

常用属性:

fromXScale:起始的x方向的缩放

toXScale:结束的x方向的缩放

fromYScale:起始的y方向的缩放

toYScale:终止的y方向的缩放

repeatCount:重复的次数

repeatMode:重复的模式

interpolator:加速效果

5、set:组合动画

常用属性:

repeatCount:重复的次数

repeatMode:重复的模式

3、在对应的Activity中通过AnimationUtils.loadAnimation获取对应的动画对象

4、找到对应的ImageView设置startAnimation对应的动画效果并启动

注意:interpolator动画的加速效果

常用的值:

@android:anim/accelerate_decelerate_interpolator" 先加速后减速

@android:anim/accelerate_interpolator 开始慢,结束快

@android:anim/decelerate_interpolator 开始快,结束慢

@android:anim/anticipate_interpolator 开始时会超出起始位置,再执行动画

@android:anim/overshoot_interpolator 结束时会超出终止位置,再结束动画

@android:anim/anticipate_overshoot_interpolator 开始和结束时都会超出一定距离

@android:anim/bounce_interpolator 结束时,有反弹效果

@android:anim/cycle_interpolator 动画按特定的次数执行多次,有振动效果

@android:anim/linear_interpolator 均匀的速度执行动画

2、JAVA方式

常用的动画类:

1、AlphaAnimation:透明度动画类

构造方法:

AlphaAnimation(float fromAlpha, float toAlpha)

参数说明:

fromAlpha:起始的透明度

toAlpha:终止的透明度

2、RotateAnimation:旋转动画类

构造方法:

RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)

参数说明:

fromDegrees:起始的角度

toDegrees:终止的角度

pivotX:中心点的x坐标

pivotY:中心点的y坐标

3、TranslateAnimation:平移动画类

构造方法:

TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

参数说明:

fromXDelta:x方向起始位置

toXDelta:x方向终止位置

fromYDelta:y方向起始位置

toYDelta:y方向终止位置

4、ScaleAnimation:缩放动画类

构造方法:

ScaleAnimation(float fromX, float toX, float fromY, float toY)

参数说明:

fromX:x方向的起始缩放

toX:x方向终止缩放

fromY:y方向起始缩放

toY:y方向终止缩放

5、AnimationSet:组合动画类

常用方法:

addAnimation:添加动画效果

三、属性动画

res\animator

2种方式:

1、xml文件

使用步骤:

1、在res\animator文件夹

2、创建对应的

使用android:propretyName:用来标记哪种动画

常用的值:

alpha:透明度

backgroundColor:背景色

rotateX/Y:旋转

scaleX/Y:缩放

translationX/Y:移动

注意:组合动画使用的

3、在对应的Activity中获取对应的动画并绑定控件且启动

AnimatorInflater.loadAnimator:将指定的xml文件转换为动画对象

setTarget:为指定的控件设置动画效果

start:启动动画

end:结束动画

cancel:取消动画

2、java方式

1、ObjectAnimator:属性动画

包括常用的:透明度、旋转、移动、缩放

2、AnimatorSet:属性动画的组合动画

playTogether:同时播放

playSequentially:顺序播放

play(动画).with/before/after:自定义播放

addUpdateListener:监听属性动画的变化过程

颜色资源:

路径:res\values\colors

补间动画

public class MainActivity extends Activity {

private ImageView iv;

//声明对应的补间动画对象

private Animation animation;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

iv=(ImageView)findViewById(R.id.iv);

}

public void click(View view) {

switch (view.getId()) {

case R.id.tv_1://透明度动画

//加载对应的透明度动画效果

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

break;

case R.id.tv_2://旋转

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

break;

case R.id.tv_3://移动

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

break;

case R.id.tv_4://缩放

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

break;

case R.id.iv://组合动画

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

AnimationSet as=new AnimationSet(true);

as.addAnimation(animation);

as.setDuration(3000);

as.setRepeatCount(10);

as.setRepeatMode(Animation.RESTART);

as.setFillAfter(true);//设置动画结束时,是否

//设置是否有动画效果

as.setInterpolator(this, android.R.anim.fade_in);

break;

}

//为动画设置监听事件

animation.setAnimationListener(new AnimationListener() {

//启动

@Override

public void onAnimationStart(Animation animation) {

// TODO Auto-generated method stub

Log.e("Animation", "onAnimationStart……");

}

//重复

@Override

public void onAnimationRepeat(Animation animation) {

// TODO Auto-generated method stub

Log.e("Animation", "onAnimationRepeat……");

}

//结束

@Override

public void onAnimationEnd(Animation animation) {

// TODO Auto-generated method stub

Log.e("Animation", "onAnimationEnd……");

}

});

//开始执行动画

iv.startAnimation(animation);

}

}

xml

2

3

4

-

6

补间动画有一定的缺陷,按钮移动后点击事件依然在原来的位置,动画效果是通过一些列算法来实现的,所以后来出现属性动画,效果是真实控件的移动变幻。

你可能感兴趣的:(android 之动画)