自Android 3.0以上的版本,SDK新增了一个android.animation包,里面的类都是跟动画效果实现相关的,通过Honeycomb API,能够实现非常复杂的动画效果。但如果开发者想在3.0以下的版本中也能使用到这套API,那么Nine Old Androids就会是你最好的选择,该API和Honeycomb API完全一样,只是改变了你使用com.nineoldandroids.XXX的入口。
该项目包含两个工程,一个是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>
实现效果如下:
点击按钮文字上升消失
可以使用该包,实现如path的弧形菜单效果:
Android动画进阶—使用开源动画库nineoldandroids