Android动画浅谈之Animation动画

这几天学习使用了Android的动画相关的知识,现在总结一下学到的关于Animation的知识,后面还会介绍一下更加好用的Android动画实现方法

Android中Animation动画一共有四种动画,分别为rotation(旋转)、translation(偏移)、alpha(透明度)、scale(缩放)主要就是这四种方法,我们可以通过xml文件来实现这几种动画,也可以通过代码来实现动画,下面会对两种实现方法做一个详细的介绍:



1、旋转动画

a、通过代码实现

// 四个参数代表,旋转的起始角度、终止角度、旋转x点、旋转y点
			RotateAnimation rotateAnimation = new RotateAnimation(0f, 360f,
					Animation.RELATIVE_TO_SELF, 0.5f,
					Animation.RELATIVE_TO_SELF, 0.5f);
			rotateAnimation.setDuration(2000);// 旋转时间为2秒
			img.startAnimation(rotateAnimation);// 启动动画

b、通过xml文件来实现

Animation rotateAnimation2=(Animation) AnimationUtils.loadAnimation(this, R.anim.myanimation);
			img.startAnimation(rotateAnimation2);
后面几种方法和此方法一样就不在粘贴上面的代码
其中的anim动画文件为anim文件夹下的myanimation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <rotate
        android:duration="2000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />

</set>

2、偏移动画

a、通过代码实现

//四个参数代表,偏移的x起始点、x终止点、偏移的y起始点、y终止点
			TranslateAnimation translateAnimation=new TranslateAnimation(0f, 200f, 0f, 200f);
			translateAnimation.setDuration(2000);
			img.startAnimation(translateAnimation);

b、通过xml文件来实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:toXDelta="200"
        android:fromYDelta="0"
        android:toYDelta="200" />

</set>

3、透明度动画

a、通过代码实现

// 两个参数代表,透明度从0升到1
			AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f);
			alphaAnimation.setDuration(2000);
			img.startAnimation(alphaAnimation);

b、通过xml文件来实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
        android:duration="2000"
        android:fromAlpha="0"
        android:toAlpha="1" />

</set>

4、缩放动画

a、通过代码实现

// 六个参数代表,缩放的x、y的大小,x、y的起始和终止点
ScaleAnimation scaleAnimation = new ScaleAnimation(0f, 1f, 0f, 1f,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(2000);
img.startAnimation(scaleAnimation);


b、通过xml文件来实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <scale
        android:duration="2000"
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="200"
        android:toYScale="200" />

</set>

5、四种动画同时进行


a、代码实现

RotateAnimation rotateAnimation1 = new RotateAnimation(0f, 360f,
					Animation.RELATIVE_TO_SELF, 0.5f,
					Animation.RELATIVE_TO_SELF, 0.5f);
			TranslateAnimation translateAnimation1 = new TranslateAnimation(0f,
					200f, 0f, 200f);
			AlphaAnimation alphaAnimation1 = new AlphaAnimation(0f, 1f);
			ScaleAnimation scaleAnimation1 = new ScaleAnimation(0f, 1f, 0f,
					1f, Animation.RELATIVE_TO_SELF, 0.5f,
					Animation.RELATIVE_TO_SELF, 0.5f);
			
			AnimationSet set=new AnimationSet(true);
			set.addAnimation(rotateAnimation1);
			set.addAnimation(translateAnimation1);
			set.addAnimation(alphaAnimation1);
			set.addAnimation(scaleAnimation1);
			set.setDuration(2000);
			img.startAnimation(set);

b、xml文件实现

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 旋转 -->
    <rotate
        android:duration="2000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />
    <!-- 偏移 -->
    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="200"
        android:toYDelta="200" />
    <!-- 透明度 -->
    <alpha
        android:duration="2000"
        android:fromAlpha="0"
        android:toAlpha="1" />
    <!-- 缩放 -->
    <scale
        android:duration="2000"
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1" />

</set>


最后附上项目的代码(粘贴就能用)

package com.example.animationtest;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class MainActivity extends ActionBarActivity {

	private ImageView img;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		img = (ImageView) findViewById(R.id.imageView);
	}

	public void myclick(View view) {
		switch (view.getId()) {
		case R.id.rotation_bt:
			/*
			 * 通过代码实现
			 */
			// 四个参数代表,旋转的起始角度、终止角度、旋转x点、旋转y点
			RotateAnimation rotateAnimation = new RotateAnimation(0f, 360f,
					Animation.RELATIVE_TO_SELF, 0.5f,
					Animation.RELATIVE_TO_SELF, 0.5f);
			rotateAnimation.setDuration(2000);// 旋转时间为2秒
			img.startAnimation(rotateAnimation);// 启动动画
			/*
			 * 通过xml文件来实现动画效果
			 */
			// Animation rotateAnimation2 = (Animation) AnimationUtils
			// .loadAnimation(this, R.anim.myanimation);
			// img.startAnimation(rotateAnimation2);
			break;
		case R.id.translation_bt:
			/*
			 * 通过代码实现
			 */
			// 四个参数代表,偏移的x起始点、x终止点、偏移的y起始点、y终止点
			TranslateAnimation translateAnimation = new TranslateAnimation(0f,
					200f, 0f, 200f);
			translateAnimation.setDuration(2000);
			img.startAnimation(translateAnimation);
			break;
		case R.id.alpha_bt:
			/*
			 * 通过代码实现
			 */
			// 两个参数代表,透明度从0升到1
			AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f);
			alphaAnimation.setDuration(2000);
			img.startAnimation(alphaAnimation);
			break;
		case R.id.scale_bt:
			/*
			 * 通过代码实现
			 */
			// 六个参数代表,缩放的x、y的大小,x、y的起始和终止点
			ScaleAnimation scaleAnimation = new ScaleAnimation(0f, 1f, 0f, 1f,
					Animation.RELATIVE_TO_SELF, 0.5f,
					Animation.RELATIVE_TO_SELF, 0.5f);
			scaleAnimation.setDuration(2000);
			img.startAnimation(scaleAnimation);
			break;
		case R.id.together_bt:
			RotateAnimation rotateAnimation1 = new RotateAnimation(0f, 360f,
					Animation.RELATIVE_TO_SELF, 0.5f,
					Animation.RELATIVE_TO_SELF, 0.5f);
			TranslateAnimation translateAnimation1 = new TranslateAnimation(0f,
					200f, 0f, 200f);
			AlphaAnimation alphaAnimation1 = new AlphaAnimation(0f, 1f);
			ScaleAnimation scaleAnimation1 = new ScaleAnimation(0f, 1f, 0f, 1f,
					Animation.RELATIVE_TO_SELF, 0.5f,
					Animation.RELATIVE_TO_SELF, 0.5f);

			AnimationSet set = new AnimationSet(true);
			set.addAnimation(rotateAnimation1);
			set.addAnimation(translateAnimation1);
			set.addAnimation(alphaAnimation1);
			set.addAnimation(scaleAnimation1);
			set.setDuration(2000);
			img.startAnimation(set);

			break;
		}
	}
}

布局文件代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

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

    <Button
        android:id="@+id/rotation_bt"
        android:onClick="myclick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="旋转动画" />

    <Button
        android:id="@+id/translation_bt"
        android:onClick="myclick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="偏移动画" />

    <Button
        android:id="@+id/alpha_bt"
        android:onClick="myclick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="透明度动画" />

    <Button
        android:id="@+id/scale_bt"
        android:onClick="myclick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="缩放动画" />

    <Button
        android:id="@+id/together_bt"
        android:onClick="myclick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="混合动画" />

</LinearLayout>


还有anim文件下的myanimation.xml文件代码

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 旋转 -->
    <rotate
        android:duration="2000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" />
    <!-- 偏移 -->
    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="200"
        android:toYDelta="200" />
    <!-- 透明度 -->
    <alpha
        android:duration="2000"
        android:fromAlpha="0"
        android:toAlpha="1" />
    <!-- 缩放 -->
    <scale
        android:duration="2000"
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1" />

</set>

源码:

http://download.csdn.net/detail/jl_stone/9518252


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值