Android 动画之补间动画

    补间动画是指定开始和结束的图像状态,自动生成需要显示的过度图像的动画。补间动画又分为四种:移动,缩放,旋转,通明度。下面以移动补间动画来做简单说明,效果是把一个ImageView从左上角,向右下方向移动,然后返回到起始点,中间对动画状态进行监听,效果如图:


 

    下面简述其主要步骤:

 

    1、定义动画文件:

    <translate xmlns:android="http://schemas.android.com/apk/res/android"  
        android:duration="5000"  
        android:fromXDelta="0"  
        android:fromYDelta="0"  
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"  
        android:toXDelta="200"  
        android:toYDelta="300" />  

 说明:

  • android:interpolator:动画渲染器,有三种渲染器可以设 置:accelerate_decelerate_interpolator,accelerate_interpolator,decelerate_interpolator, 它们分别对应的效果是:开始加速中间减速,一直加速,一直减速。
  • fromXDelta;动画起始位置的X坐标;
  • fromYDelta:动画起始位置的Y坐标;
  • toXDelta:动画结束位置的X坐标;
  • toYDelta:动画结束位置的Y坐标;
  • duration:动画持续时间,单位毫秒。

    2、加载并启动动画:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;

public class TranslateActivity extends Activity implements AnimationListener {
	
	private static final String TAG = "Translate";
	
	private ImageView imageView;
	private Animation translateAnimation;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        imageView = (ImageView) findViewById(R.id.imageView1);
        
        // 装载动画文件
        translateAnimation = AnimationUtils.loadAnimation(this, R.xml.translate);
        
        // 设置动画监听器
        translateAnimation.setAnimationListener(this);
        
        // 设置重复次数
        translateAnimation.setRepeatCount(1);
        
        // 设置重复模式
        translateAnimation.setRepeatMode(Animation.REVERSE);
        
        // 启动动画
//        imageView.setAnimation(translateAnimation);
//        translateAnimation.start();
        
        imageView.startAnimation(translateAnimation);
        
    }

	@Override
	public void onAnimationEnd(Animation animation) {
		Log.i(TAG, "onAnimationEnd");
	}

	@Override
	public void onAnimationRepeat(Animation animation) {
		Log.i(TAG, "onAnimationRepeat");
	}

	@Override
	public void onAnimationStart(Animation animation) {
		Log.i(TAG, "onAnimationStart");
	}
	
}

    修改上面的某些代码,猜想效果,并和实际效果作对比,有时会发现很有趣的现象!:)

 

    缩放动画的XML示例代码:

 

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <scale
        android:duration="500"
        android:fromXScale="1"
        android:fromYScale="0.1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="100"
        android:toXScale="1"
        android:toYScale="1.0" />

</set>

 

    旋转动画的XML示例代码如下:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="10000"
    android:fromDegrees="0"
    android:interpolator="@anim/linear_interpolator"
    android:pivotX="200%"
    android:pivotY="300%"
    android:repeatCount="infinite"
    android:repeatMode="restart"
    android:toDegrees="360" />

 

    3、多说一句:

    使用代码同样可以实现从XML加载动画一样的效果,有兴趣的话,可以试试看!:)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值