浅谈Android动画

Android的基础动画有四种

1.Tween Animation —— 变换动画

2.Layout Animation —— 布局动画

3.Frame Animation —— 帧动画

4.Property Animation —— 属性动画

两种实现方法

1.配置文件(/res/anim) —— alpha、scale、translate、rotate (简单)

2.java代码实现 —— AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation(更灵活)

Tween Animation(变换动画)

Alpha —— 渐变透明度动画

Scale —— 渐变尺寸缩放动画

Translate —— 位置移动动画

Rotate —— 旋转动画

Alpha(渐变透明度):

1.xml实现方式:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <alpha
        android:duration="1000"
        android:fromAlpha="0.1"
        android:toAlpha="1.0" >
    </alpha>
</set>

duration: 动画持续时间(单位:毫秒)

fromAlpha: 透明度从10%开始

toAlpha:透明度截至到100%

在Activity中调用:

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

2.java代码实现:

例如闪烁效果:

//创建动画
AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
alphaAnimation.setDuration(100);
//次数 可以直接写int
alphaAnimation.setRepeatCount(ValueAnimator.INFINITE);
//倒序重复REVERSE  正序重复RESTART
alphaAnimation.setRepeatMode(Animation.REVERSE);
//开始播放
image.startAnimation(alphaAnimation);

Scale(渐变尺寸缩放):

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
  >
    <scale
        android:duration="2000"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />
</set>

fromXScale:动画起始时 x坐标上的伸缩尺寸

fromYScale:动画起始时 y坐标上的伸缩尺寸

toXScale:动画结束时 x坐标上的伸缩尺寸

toYScale:动画结束时 y坐标上的伸缩尺寸

interpolator:指定一个动画的插入器 (accelerate_decelerate_interpolator 加速-减速 动画插入器 ; accelerate_interpolator 加速;decelerate_interpolator 减速)

pivotX:动画相对于物件的x坐标的开始位置

pivotY:动画相对于物件的y坐标的开始位置

Translate(位置移动):

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true"
    android:fillBefore="false"
    >
    <translate
        android:duration="1000"
        android:fromXDelta="10"
        android:fromYDelta="10"
        android:toXDelta="100"
        android:toYDelta="100"
      />
</set> 

fromXDelta:动画起始时  x坐标上的位置

fromYDelta:动画起始时  y坐标上的位置

toXDelta:动画结束时  x坐标上的位置

toYDelta:动画结束时  y坐标上的位置

fillAfter:为true时  动画停留在结束时的状态 (注意:要放在set里 否则无效)

fillBefore:为true时  动画返回开始时的状态 (注意:要放在set里 否则无效)

用java写一下:

TranslateAnimation translate = new TranslateAnimation(-50, 50,0, 0);
translate.setDuration(1000);
translate.setRepeatMode(Animation.REVERSE);
//将fillAfter、fillBefore放到set里  
AnimationSet set = new AnimationSet(true);
set.addAnimation(translate);
set.setFillBefore(false);
set.setFillAfter(true);
image.startAnimation(set);

Rotate(旋转动画):

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
  >
    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="+360" />
</set>

fromDegrees:动画起始时的角度

toDegrees:动画结束时的角度  可以大于360度 (+代表顺时针,-代表逆时针)

简单的组合动画效果:

顺序播放:

loadAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
image.startAnimation(loadAnimation);
final Animation loadAnimation2 = AnimationUtils.loadAnimation(this,R.anim.rotate);
loadAnimation.setAnimationListener(new Animation.AnimationListener() {
	@Override
	public void onAnimationStart(Animation arg0) {
	    // TODO Auto-generated method stub
	}
	@Override
	public void onAnimationRepeat(Animation arg0) {
	    // TODO Auto-generated method stub
	}
	@Override
	public void onAnimationEnd(Animation arg0) {
	    // TODO Auto-generated method stub
	    image.startAnimation(loadAnimation2);
	    }
	}); 

同时播放:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <alpha
        android:duration="3000"
        android:fromAlpha="1.0"
        android:startOffset="3000"
        android:toAlpha="0.2" />
    <translate
        android:duration="1000"
        android:fromXDelta="10"
        android:fromYDelta="10"
        android:toXDelta="100"
        android:toYDelta="100"
        />
</set>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值