`

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

 
阅读更多

自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

 

 

  • 大小: 106.5 KB
分享到:
评论

相关推荐

    Flex 布局变化时的动画效果解析 简单版

    SWF是Adobe Flash的文件格式,通常用于展示交互式内容,包括动画和小游戏。要查看和理解这个文件,你需要一个支持SWF播放的浏览器插件或者使用独立的Flash Player。 总之,Flex布局动画主要依赖于CSS的`transition`...

    自定义View实现音量亮度等增减效果

    总的来说,实现“自定义View实现音量亮度等增减效果”涉及到Android UI编程的多个方面,包括事件处理、动画制作、系统接口的使用以及性能优化等。通过掌握这些知识点,开发者可以创造出更加个性化的用户界面,提升...

    动画资源——丰富的动画

    5. 数据可视化动画:动态展示数据变化,如图表的增减、折线图的绘制过程。 在实际应用中,我们还需要考虑性能优化。过度频繁的动画可能会对设备性能造成影响,因此我们需要合理地使用缓动函数来控制动画的速度变化...

    微信小程序-渐变发光加载动画.zip

    首先,渐变发光加载动画是一种视觉效果,它通过色彩的逐渐变化以及亮度的增减,营造出一种动感十足的视觉体验,通常用于数据加载、页面切换或网络请求等待的过程中,让用户知道程序正在进行后台操作。在微信小程序中...

    最强9种css3圆形按钮hover鼠标经过动画效果

    3. **边框动画**:利用`border-width`、`border-radius`和`transition`属性,可以实现边框在hover时的动态变化,如边框颜色的渐变或边框宽度的增减。 4. **旋转与缩放**:`transform`属性允许按钮在鼠标悬停时进行...

    swift-仿饿了么美团购物车点餐页面的动画效果

    - **数量增减**:商品数量的增加或减少可以通过数字计数器的动画展示,如数字飞入飞出或渐变。 - **购物车更新**:购物车总金额和商品数量的变化也需要动态显示,比如总价标签的数字跳动,购物车图标上的小红点...

    iOS 实现脉冲雷达以及动态增减元素 By Swift

    脉冲雷达动画是一种常用于展示地理位置、探测范围或者数据更新的动画效果,而动态增减元素则涉及数组操作和UI刷新,这两者结合可以为用户呈现一种生动且实时的数据展示方式。 首先,我们需要理解Swift中的Core ...

    Android-ShoppingCart一个Android实现购物车页面及购物车效果(点击动画)

    "Android-ShoppingCart"项目是一个实例,它专注于实现购物车页面及其点击动画效果,这在提升用户体验方面至关重要。在这个项目中,开发者将学习到如何构建一个功能完备且具有视觉吸引力的购物车界面。 首先,我们要...

    jquery动态增减选项卡

    本教程将详细讲解如何使用jQuery实现动态增减选项卡的功能,这种功能常见于各种Web应用中,如浏览器界面或者自定义用户面板。 首先,我们需要创建HTML结构来承载选项卡。每个选项卡由一个标题(通常为链接)和对应...

    EXCEL动画——常规操作

    10. **交互式图表**:利用交互式图表插件,如Power Query和Power Pivot,可以创建动态数据模型,用户可以直接在图表上进行筛选、排序和聚合操作,达到类似动画的互动效果。 总的来说,虽然Excel不是专业的动画制作...

    超酷动画效果的PPT

    ### 超酷动画效果的PPT:精美的模板与高效传达 #### 一、引言 在现代商业环境中,有效的沟通方式对于个人和企业来说至关重要。PowerPoint(PPT)作为一款广受欢迎的演示工具,被广泛应用于各种场合,如会议、培训...

    纯css3实现的月夜星空下风车旋转动画效果源码.zip

    同时,`transition`属性可以添加平滑过渡效果,当风车的旋转状态发生变化时,如鼠标悬停,旋转速度的增减等。 此外,为了营造月夜星空的背景,我们可以利用CSS3的背景属性,设置星空背景图或使用渐变色来模拟星空...

    波浪增减水_波浪增减水_

    5. **数学运算**:C语言提供了丰富的数学函数库,如`math.h`,我们可以用其中的函数进行加减乘除、指数、对数等计算,以模拟波浪的增减变化。 6. **循环和条件判断**:通过循环结构遍历波浪数据,进行逐点计算。...

    带增减按钮的输入框

    在网页设计中,"带增减按钮的输入框"是一种...在实际项目中,你可能需要根据具体需求进行调整,比如添加动画效果、自定义样式或者处理其他交互逻辑。通过这种方式,你可以为用户提供更友好的界面,提升他们的使用体验。

    可增加图片大小或增减数量的焦点图

    这些效果利用JavaScript库,如jQuery或自定义的动画函数来实现,旨在提升用户体验,使焦点图更具吸引力。 为了实现以上功能,开发者可能采用了HTML5的`&lt;figure&gt;`和`&lt;figcaption&gt;`标签来结构化图片和其描述,结合CSS...

    基于jquery+css3实现鼠标悬停图片摇摆动画效果源码.zip

    在本项目中,我们主要探讨如何使用jQuery和CSS3技术来实现一个动态的图片摇摆动画效果,当鼠标悬停在图片上时,图片会呈现出摇摆的效果,为用户界面增添交互性和趣味性。以下是对这个功能的详细解析: 1. **jQuery...

    jQuery Spin button 文本框数值自动增减效果.rar

    jQuery Spin button 是一款非常实用的前端插件,它主要用于文本框(input[type="text"])中的数值自动增减功能。这款插件利用了JavaScript库jQuery的强大功能,为用户提供了一种直观且易于操作的方式,以便在网页...

    ui常见动画

    这些动画可以是折线图、柱状图或者饼图等形式,通过平滑过渡展示数据的增减。在设计趋势图动画时,要注意保持数据的准确性,同时通过颜色、大小变化等视觉元素强化数据的趋势。例如,使用ECharts、D3.js等数据可视化...

    swift-iOS-支持点赞数字动画的SPScrollNumLabel

    `SPScrollNumLabel`是一个专为iOS设计的Swift库,它提供了一个动态展示点赞数增减的动画效果,使得数字的变化过程更加生动有趣,从而提升用户的交互体验。 `SPScrollNumLabel`的核心功能在于其能够平滑地滚动显示...

Global site tag (gtag.js) - Google Analytics