自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
文章介绍九老Androids库,它允许开发者在Android 3.0以下版本中使用Honeycomb API实现复杂动画效果。通过示例代码展示如何在主界面上实现游戏金币增加的提示动画,包括简单的消失动画。布局XML文件展示了主界面的布局设计。

2157

被折叠的 条评论
为什么被折叠?



