码迷,mamicode.com
首页 > 移动开发 > 详细

【Android高级】安卓各种动画使用方法详解

时间:2014-12-10 10:54:21      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:动画   imageview   安卓   android   animation   

一、概述

Android提供了几种动画类型:View Animation Drawable Animation Property Animation

ViewAnimation相当简单,不过只能支持简单的缩放、平移、旋转、透明度基本的动画,且有一定的局限性。

Drawable Animation就是所谓的帧动画,一般作为Drawable的背景使用。

PropertyAnimation产生的原因,你希望View有一个颜色的切换动画;你希望可以使用3D旋转动画;你希望当动画停止时,View的位置就是当前的位置;这些View Animation都无法做到。

二、使用方法

(1View Animation(一个组件的动画)

     a.采用定义xml动画,可以在一个set资源里面定义多种效果,使用这种方法时要注意里面的坐标的使用,是以当前组件的左上边为原点。可以使用X%p这种定义与父布局的关系。在代码中加载时用AnimationUtils.loadAnimation(context, id);的方法得到动画并用组件的huoJianImageView.setAnimation();方法设置动画,启动动画时可以用得到的animation启动,也可以用组件的start的方法。

     b.采用java代码生成动画,TranslateAnimationAlphaAnimation。生成动画以后的设置方法如前。

 2Drawable Animation (连续变化的动画)

     Drawable里面定义animation-list然后作为一个组件的背景,在java代码中得到

AnimationDrawable animationDrawable = (AnimationDrawable) bullImageView.getBackground();

     然后启动 animationDrawable.start()

     一般使用这种方法需要的注意的是控制该动画的最后一帧播放完毕,则组件消失。

     可自定义一个ImageView代码如下所示:

 

package com.animal.bull;

import java.lang.reflect.Field;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;

public class MyImage extends ImageView {
	AnimationDrawable animationDrawable;
	int totalFrame;
	Field field;

	public void setAnimationDrawable(AnimationDrawable animationDrawable) {
		this.animationDrawable = animationDrawable;
		totalFrame = animationDrawable.getNumberOfFrames();
	}

	public MyImage(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		try {
			if (animationDrawable != null) {
				field = AnimationDrawable.class.getDeclaredField("mCurFrame");
				field.setAccessible(true);
				int r = field.getInt(animationDrawable);
				if (r == totalFrame - 1) {
					setVisibility(View.INVISIBLE);
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		super.onDraw(canvas);
	}
}

  

【Android高级】安卓各种动画使用方法详解

标签:动画   imageview   安卓   android   animation   

原文地址:http://blog.csdn.net/scboyhj__/article/details/41842269

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!