android动画-动画分类及代码示例

原来一直对动画一知半解,只知道按照网上的方法会用就行了,但是自己写起来感觉确实有点费劲,今天终于研究了代码实现,一下子感觉清晰多了。先把总结如下,代码中有详细的注释。

动画分类

1.Peoperty Animation

这个动画是Android3.0之后推出的目前用处不大。

2.View Animation

这类动画也叫tween animation 主要分为 渐变动画(AlphaAnimation)旋转动画(RotateAnimation)

缩放动画(ScaleAnimation)位移动画(TranslateAnimation)

3.Drawable Animation

这类动画也叫帧动画 FrameAnimation

先上tween animation

MainActivity.java

package com.example.testanimation;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

	private ImageView imgView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		imgView = (ImageView)this.findViewById(R.id.imgView) ;
		Button btnAlpha = (Button)this.findViewById(R.id.btnAlpha) ;
		btnAlpha.setOnClickListener(new AnimationOnClickListener(AnimationType.alpha));
		Button btnRotate = (Button)this.findViewById(R.id.btnRotate) ;
		btnRotate.setOnClickListener(new AnimationOnClickListener(AnimationType.rotate));
		Button btnTraslate = (Button)this.findViewById(R.id.btnTraslate) ;
		btnTraslate.setOnClickListener(new AnimationOnClickListener(AnimationType.traslate));
		Button btnScale = (Button)this.findViewById(R.id.btnScale) ;
		btnScale.setOnClickListener(new AnimationOnClickListener(AnimationType.scale));
		Button btnComplex = (Button)this.findViewById(R.id.btnComplex) ;
		btnComplex.setOnClickListener(new AnimationOnClickListener(AnimationType.complex));

	}

	enum AnimationType {
		alpha,
		rotate,
		traslate,
		scale,
		complex
	}

	class AnimationOnClickListener implements OnClickListener {

		private AnimationType mAnimationType;

		public AnimationOnClickListener (AnimationType animationType) {
			this.mAnimationType = animationType;
		}

		@Override
		public void onClick(View v) {
			switch (mAnimationType) {
			case alpha:
				/**
				 * 透明度从不透明变为0.2透明度
				 */
				AlphaAnimation _alphaAnimation = new AlphaAnimation(1.0f, 0.2f);
				_alphaAnimation.setDuration(200);
				_alphaAnimation.setFillAfter(true);//动画执行完的状态显示
				imgView.startAnimation(_alphaAnimation);
				break;
			case rotate:
				/**
				 * RotateAnimation 以图片中点为圆心旋转360度
				 * params:
				 * pivotXType 中心点x坐标类型 RELATIVE_TO_SELF相对于自己,RELATIVE_TO_PARENT相对于父view
				 * pivotYType 同上
				 *
				 * pivotXValue,pivotYValue(圆心)
				 *
				 */
				RotateAnimation _rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
				_rotateAnimation.setDuration(3000);
//				_rotateAnimation.setRepeatMode(Animation.REVERSE);
				imgView.startAnimation(_rotateAnimation);
				break;
			case traslate:
				/**
				 * 按照图片的宽高2倍的位移移动
				 */
				TranslateAnimation _translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f);
				_translateAnimation.setDuration(3000);
				_translateAnimation.setFillAfter(true);
				imgView.startAnimation(_translateAnimation);
				break;
			case scale:
				/**
				 * ScaleAnimation 以图片左上角为静止点,按照1.5倍尺寸放大
				 * params:
				 * pivotXType 中心点x坐标类型 RELATIVE_TO_SELF相对于自己,RELATIVE_TO_PARENT相对于父view
				 * pivotYType 同上
				 * pivotXValue,pivotYValue(静止点)
				 */
				ScaleAnimation _scaleAnimation = new ScaleAnimation(1.0f, 1.5f, 1.0f, 1.5f, Animation.RELATIVE_TO_PARENT, 0f, Animation.RELATIVE_TO_SELF, 0f);
				_scaleAnimation.setDuration(300);
				_scaleAnimation.setZAdjustment(Animation.ZORDER_TOP);
				_scaleAnimation.setRepeatCount(1);
				_scaleAnimation.setRepeatMode(Animation.REVERSE);//必须设置setRepeatCount此设置才生效,动画执行完成之后按照逆方式动画返回
				imgView.startAnimation(_scaleAnimation);
				break;
			case complex:
				AnimationSet _animationSet = new AnimationSet(false);
				AlphaAnimation _alphaAnimation2 = new AlphaAnimation(1.0f, 0.2f);
				_alphaAnimation2.setDuration(1000);
				_alphaAnimation2.setRepeatCount(1);
				_alphaAnimation2.setRepeatMode(Animation.REVERSE);
//				_alphaAnimation2.setFillAfter(true);//设此地方不好使,必须设置到AnimationSet中

				TranslateAnimation _translateAnimation2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 2f);
				_translateAnimation2.setDuration(1000);
				_translateAnimation2.setRepeatCount(1);
				_translateAnimation2.setRepeatMode(Animation.REVERSE);
//				_translateAnimation2.setFillAfter(true);

				_animationSet.addAnimation(_alphaAnimation2);
				_animationSet.addAnimation(_translateAnimation2);
				_animationSet.setFillAfter(true);
//				_animationSet.setRepeatCount(1);
//				_animationSet.setRepeatMode(Animation.REVERSE);//这两个属性设此地不好使,必须单个设置

				imgView.startAnimation(_animationSet);
				break;

			default:
				break;
			}

		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imgView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <Button
        android:id="@+id/btnAlpha"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="alpha" />

    <Button
        android:id="@+id/btnRotate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="rotate" />

    <Button
        android:id="@+id/btnTraslate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="traslate" />

    <Button
        android:id="@+id/btnScale"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="scale" />

    <Button
        android:id="@+id/btnComplex"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="animationSet" />

</LinearLayout>

下面为frame animation

public class FrameAnimationAcitvity extends Activity {
	private ImageView imageView;
	private AnimationDrawable ad;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.animation_list);
    	Button button=(Button)findViewById(R.id.button1);
    	imageView=(ImageView)findViewById(R.id.imageView1);
    	imageView.setBackgroundResource(R.drawable.framedrawable);
    	ad=(AnimationDrawable)imageView.getBackground();
    	button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
                  	ad.start();
			}
		});
    }
}

framedrawable.xml

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/grid_liushui" android:duration="200"/>
    <item android:drawable="@drawable/grid_payout" android:duration="200"/>
    <item android:drawable="@drawable/grid_report" android:duration="200"/>
</animation-list></span>

附上tween动画的源码下载链接

http://download.csdn.net/detail/duanyu218/7449471

android动画-动画分类及代码示例

时间: 2024-10-20 08:38:50

android动画-动画分类及代码示例的相关文章

js动画(animate)简单引擎代码示例

var animation = function(obj) {    this.obj = obj;    this.frames = 0;    this.timmer = undefined;    this.running = false;    this.ms = [];} animation.prototype = {    fps: 36,    init: function(props, duration, tween) {        //console.log('初始化');

Android播放动画的方法示例

今天开始陆续整理一下一些常规的Android常用开发实用程序. 第一季:Android播放动画的方法示例 1. 通常动画都是gif图像,推荐使用easygifanimator工具来将其拆解为多个图片,建议是png的: 2. 在Android工程的res目录下新增anim目录,新建一个xml文件,比如loading.xml: <?xml version="1.0" encoding="utf-8"?> <animation-list android:

Android——动画的分类

Android包含三种动画:View Animation, Drawable Animation, Property Animation(Android 3.0新引入). 1.View Animation:也就是所说的Tweened Animation(补间动画).View Animation分为四类:AlphaAnimation, RotateAnimation, ScaleAnimation, TranslateAnimation,分别对应透明度.旋转.大小.位移四种变化. 它是基于View

android基本动画,代码构建动画

使用代码构建android基本动画,基本动画有以下: AlphaAnimation:渐变透明度动画 RotateAnimation:旋转动画 ScaleAnimation:伸缩动画 TranslateAnimation:平移动画 可以定义出一些常用的动画效果,也可以自定义一些动画,把参数预留出来. 可以定义一些组合动画效果,例如:从里到外的效果.对于组合的动画效果,使用基本的动画效果构建起来. 使用AnimationSet添加到此集合中,让其里面的动画一起起效果,可以看到意想不到的效果. 代码工

Android属性动画ValueAnimator源码简单分析

Android开发的过程中经常要用到属性动画,经常都是网上扒下来看下怎么用,但是经常不知道为什么要这么用,手一哆嗦一不小心就点到源码里面去了.我们就来看看Android属性动画ValueAnimator类源码的简单实现,从而对ValueAnimator类有个大概的了解. 在Android开发过程中做动画效果的时候用到ValueAnimator的时候最简单的方法我们是这么干的 // ValueAnimator ValueAnimator valueAnimator = ValueAnimator.

Android Animation动画实战(一): 从布局动画引入ListView滑动时,每一Item项的显示动画

前言: 之前,我已经写了两篇博文,给大家介绍了Android的基础动画是如何实现的,如果还不清楚的,可以点击查看:Android Animation动画详解(一): 补间动画 及 Android Animation动画详解(二): 组合动画特效 . 已经熟悉了基础动画的实现后,便可以试着去实现常见APP中出现过的那些精美的动画.今天我主要给大家引入一个APP的ListView的动画效果: 当展示ListView时,Listview的每一个列表项都按照规定的动画显示出来. 说起来比较抽象,先给大家

79.Android之动画基础

转载:http://a.codekk.com/detail/Android/lightSky/%E5%85%AC%E5%85%B1%E6%8A%80%E6%9C%AF%E7%82%B9%E4%B9%8B%20Android%20%E5%8A%A8%E7%94%BB%E5%9F%BA%E7%A1%80 一 传统 View 动画(Tween/Frame) 1.1 Tween 动画 主要有 4 中:缩放.平移.渐变.旋转 文件位置: res/anim/filename.xml编译资源的数据类型:an

一次搞定 Android 基本动画 大清理

1.Tween Animation 变换动画 Alpha:渐变透明度动画 Scale:渐变尺寸缩放动画 Translate:位置移动动画 Rotate:旋转动画 共同属性: (1)Duration:动画持续时间(单位:毫秒) (2)fillAfter:设置为true,动画转化在动画结束后被应用 (3)fillBefore:设置为true,动画转化在动画开始前被应用 (4)interpolator:动画插入器(加速.减速插入器) (5)repeatCount:动画重复次数 (6)repateMod

Android AnimationDrawable动画与APP启动引导页面

Android AnimationDrawable动画与APP启动.加载引导页面(画面) AnimationDrawable是Android的Frame动画,可以简单的认为此AnimationDrawable能够将一系列资源图片加载成"电影"一样播放.当下,在一些APP中,往往需要在APP切入主题之前加载一些引导页面(宣传海报.装饰画面.赞助商广告等等),这些内容要两个共同特点: (1)不是APP的重点内容,而仅仅只是像展台一样展览一些画面. (2)前.当前.后页面基本上无特别需要处理