NineOldAndroids动画,如游戏币增减效果

自Android 3.0以上的版本,SDK新增了一个android.animation包,里面的类都是跟动画效果实现相关的,通过Honeycomb API,能够实现非常复杂的动画效果。但如果开发者想在3.0以下的版本中也能使用到这套API,那么Nine Old Androids就会是你最好的选择,该API和Honeycomb API完全一样,只是改变了你使用com.nineoldandroids.XXX的入口。

NineOldAndroids动画,如游戏币增减效果_第1张图片

该项目包含两个工程,一个是Library,即为动画效果的实现库,另一个则是Sample,是对如何使用该API的演示。开发者可以直接登陆Google Play下载安装Nine Old Androids Sample,查看演示。

 

github地址:https://github.com/JakeWharton/NineOldAndroids

官网:http://nineoldandroids.com/ 

 

 

这里借助这个工具包,可以实现游戏吃了什么后,金币增加的上升消失的提示动画,代码非常简单:

(1)主界面:

package com.example.nineoldandroidstest;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.TextView;

import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.Animator.AnimatorListener;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;

public class MainActivity extends Activity {

	private TextView textView = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		textView = (TextView) findViewById(R.id.test_tv);
		Button button = (Button) findViewById(R.id.test_btn);
		
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				dismissAnimation(textView);
			}
		});
	}

	
	/**
	 * 使用示例http://nineoldandroids.com/:
	 * AnimatorSet set = new AnimatorSet();
		set.playTogether(
		    ObjectAnimator.ofFloat(myView, "rotationX", 0, 360),
		    ObjectAnimator.ofFloat(myView, "rotationY", 0, 180),
		    ObjectAnimator.ofFloat(myView, "rotation", 0, -90),
		    ObjectAnimator.ofFloat(myView, "translationX", 0, 90),
		    ObjectAnimator.ofFloat(myView, "translationY", 0, 90),
		    ObjectAnimator.ofFloat(myView, "scaleX", 1, 1.5f),
		    ObjectAnimator.ofFloat(myView, "scaleY", 1, 0.5f),
		    ObjectAnimator.ofFloat(myView, "alpha", 1, 0.25f, 1)
		);
		set.setDuration(5 * 1000).start();
		
	 * 
	 */
	/**
	 * 消失动画
	 * @param v
	 */
    @SuppressLint("NewApi")
	public void dismissAnimation(View v){
    	AnimatorSet mHeartAnimator;
		ObjectAnimator localObjectAnimator1 = ObjectAnimator.ofFloat(v,
				"translationY", new float[] { -200.0F });
		ObjectAnimator localObjectAnimator2 = ObjectAnimator.ofFloat(v,
				"alpha", new float[] { 0.0F });
		mHeartAnimator = new AnimatorSet();
		mHeartAnimator.playTogether(new Animator[] { localObjectAnimator1,
				localObjectAnimator2 });
		mHeartAnimator.setDuration(270L);
		mHeartAnimator.setInterpolator(new LinearInterpolator());
		mHeartAnimator.start();
		mHeartAnimator.addListener(new AnimatorListener() {
			
			public void onAnimationStart(Animator arg0) {
				// TODO Auto-generated method stub
				
			}
			
			public void onAnimationRepeat(Animator arg0) {
				// TODO Auto-generated method stub
				
			}
			
			public void onAnimationEnd(Animator arg0) {
				textView.clearAnimation();
			}
			
			public void onAnimationCancel(Animator arg0) {
				// TODO Auto-generated method stub
				
			}
		});
    }
	
	
}

 

 

(2)布局activity_main.xml

<RelativeLayout 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: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" >

    
    
    <TextView
        android:id="@+id/test_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="@string/hello_world"
        android:background="@drawable/shape_text" />

    
    <Button 
        android:id="@+id/test_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:layout_centerHorizontal="true"
        android:text="测试动画"
        />
    
</RelativeLayout>

 

实现效果如下:

NineOldAndroids动画,如游戏币增减效果_第2张图片

点击按钮文字上升消失

 

 

可以使用该包,实现如path的弧形菜单效果:

Android动画进阶—使用开源动画库nineoldandroids

 

 

你可能感兴趣的:(android)