`

java-universal-tween-engine,一个动画系统库

阅读更多
http://code.google.com/p/java-universal-tween-engine/

可以用来创建平滑的移动系统,比如循环,移动,旋转等。由于项目使用纯java写成,所以支持swt,swing,android,opengles等。Tween缓冲大家应该都不陌生,说白了就是从一起始位置逐渐移动到目标位置的过程,这个过程可以是加速移动,也可以是减速移动,这些不同的缓动方式就是Tween的各种ease。

源码在最后,将其解压后复制到src就可以了。

用法,先定义一个需要运动的物体:
public class Particule {
	private float x, y;
    
    public float getX() {
            return x;
    }
    
    public float getY() {
            return y;
    }
    
    public void setX(float x) {
            this.x = x;
    }
    
    public void setY(float y) {
            this.y = y;
    }
}


然后,实现Tweenable接口,用于表明运动的返回值和变化值
import aurelienribon.tweenengine.Tweenable;

public class TweenableParticule implements Tweenable {
    // The following lines define the different possible tween types.
    // It's up to you to define what you need :-)

    public static final int X = 1;
    public static final int Y = 2;
    public static final int XY = 3;

    // Composition pattern

    private Particule target;

    // Constructor

    public TweenableParticule(Particule particule) {
            this.target = particule;
    }

    // Tweenable implementation

    @Override
    public int getTweenValues(int tweenType, float[] returnValues) {
            switch (tweenType) {
                    case X: returnValues[0] = target.getX(); return 1;
                    case Y: returnValues[0] = target.getY(); return 1;
                    case XY:
                            returnValues[0] = target.getX();
                            returnValues[1] = target.getY();
                            return 2;
                    default: assert false; return 0;
            }
    }
    
    @Override
    public void onTweenUpdated(int tweenType, float[] newValues) {
            switch (tweenType) {
                    case X: target.setX(newValues[0]); break;
                    case Y: target.setY(newValues[1]); break;
                    case XY:
                            target.setX(newValues[0]);
                            target.setY(newValues[1]);
                            break;
                    default: assert false; break;
            }
    }
}

最后,在Activity中运动:
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import aurelienribon.tweenengine.Tween;
import aurelienribon.tweenengine.TweenGroup;
import aurelienribon.tweenengine.TweenManager;
import aurelienribon.tweenengine.Tweenable;
import aurelienribon.tweenengine.equations.*;

import com.ql.test.Particule;
import com.ql.test.TweenableParticule;

/**
 * http://code.google.com/p/java-universal-tween-engine/
 * @author admin
 *
 */
public class Screen4 extends Activity {
	Particule particule;
	TweenManager manager;
     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.screen_4);
//		Button btn_11=(Button)findViewById(R.id.btn_11);
        setContentView(new ScreenView(this));
		// Let's say we are working with an Android target. We need to pool our objects.

		Tween.setPoolEnabled(true);

		// We also need a manager to handle every tween.

		manager = new TweenManager();

		// We can now create as many interpolations as we need !
		particule=new Particule();
		particule.setX(100);
		particule.setY(100);
		
		Tweenable tweenParticle=new TweenableParticule(particule);
		
		Tween tween = Tween.to(tweenParticle, TweenableParticule.XY, 10000, Cubic.OUT).target(400, 500);
		manager.add(tween.start());

		tween = Tween.to(tweenParticle, TweenableParticule.XY, 10000, Bounce.OUT).target(100, 500).delay(10000);
		manager.add(tween.start());
		
//		TweenGroup tweenGroup=new TweenGroup().pack(
//				Tween.set(tweenParticle, TweenableParticule.XY),
//				Tween.to(tweenParticle, TweenableParticule.XY, 10000, Sine.OUT),
//				Tween.from(tweenParticle, TweenableParticule.XY, 10000, Sine.OUT),
//				Tween.to(tweenParticle, TweenableParticule.XY, 10000, Bounce.OUT)
//				);
//		manager.add(tweenGroup.sequence().repeat(2,5000).start());
		
//		TweenGroup tweenGroup= new TweenGroup().pack(
//			    Tween.to(tweenParticle, TweenableParticule.XY, 500, Quad.INOUT).target(200),
//			    Tween.to(tweenParticle, TweenableParticule.XY, 500, Quad.INOUT).target(100),
//			    Tween.to(tweenParticle, TweenableParticule.XY, 500, Quad.INOUT).target(200).delay(1000)
//			).sequence().start();
    }

    @Override
    protected void onResume() {
        super.onResume();
        
    }

    @Override
    protected void onPause() {
        super.onPause();
        manager.clear();
    }

    class ScreenView extends View{

    	Paint paint;
		public ScreenView(Context context) {
			super(context);
			// TODO Auto-generated constructor stub
			paint=new Paint();
			paint.setAntiAlias(true);
			paint.setColor(Color.RED);
			paint.setStyle(Paint.Style.FILL_AND_STROKE);
			invalidate();
		}

		@Override
		protected void onDraw(Canvas canvas) {
			// TODO Auto-generated method stub
			//super.onDraw(canvas);
			canvas.drawCircle(particule.getX(), particule.getY(), 20, paint);
			manager.update();
			invalidate();
		}
    	
		
    }
}
分享到:
评论
3 楼 zhuruyi 2012-08-27  
奇了怪了 为什么hg下载总是提示失败
2 楼 2006her 2012-03-09  
感谢分享啊。
1 楼 wxw404 2011-11-01  
谢谢收了 拿来用

相关推荐

    tween engine demo

    Universal Tween Engine是一个纯java实现的动画库。 地址:http://code.google.com/p/java-universal-tween-engine/ 只要能够用float表示的一切java对象它可以让它动画化,可以使用于Libgdx、Android、Swing等等

    java-universal-tween-engine:自动从code.google.compjava-universal-tween-engine导出

    Java通用补间引擎(Universal Tween Engine)是一款强大的动画库,主要应用于Java开发环境中,用于创建流畅的2D和3D图形动画。这个引擎是开源的,最初托管在code.google.com,但现在可能已经迁移到了其他代码托管...

    java-universal-tween-engine:从 code.google.compjava-universal-tween-engine 自动导出

    通用 Tween 引擎支持对来自任何 Java 项目(Swing、SWT、OpenGL 甚至基于控制台)中的任何对象的每个属性进行插值。 实现 TweenAccessor 接口,将其注册到引擎,并为您想要的任何内容设置动画! 在一行中,将您的...

    安卓动画效果相关-android开发中的Tween动画动画演示demo。此demo为androidstudio2.0所写.rar

    在Android Studio 2.0中,开发者可以利用其强大的集成开发环境创建一个Tween动画的演示项目。首先,创建一个新的Android Studio工程,然后按照以下步骤操作: 1. 创建动画资源文件:在res/anim目录下,添加上述提到...

    tween动画动作集

    这个“tween-engine-demo.jar”文件很可能是一个Tween动画引擎的示例库,它包含了实现Tween动画所需的各种类和方法。开发者可以导入这个库,然后根据需求创建和控制动画。"data"可能包含了一些配置文件或者资源,...

    Android---Tween动画

    Android---Tween动画 运用了4种Tween的动画效果,包括: rotate(旋转),scale(伸缩), alpha(透明度),translate(平移) 以及tween(综合4种效果)

    Tween动画完全解析

    首先,你需要创建一个动画对象,比如`TranslateAnimation`,然后设置它的起始和结束坐标,以及持续时间和重复模式。接着,你可以通过`start()`方法启动动画,并使用`setAnimationListener()`来添加监听器以获取动画...

    tween.js可生成平滑动画效果的js动画库

    总结,tween.js作为一款JavaScript动画库,极大地简化了创建平滑动画的过程,无论是新手还是经验丰富的开发者,都能快速上手并创作出富有创意的动态效果。结合实际项目中的需求,tween.js无疑能提升你的网页动态表现...

    前端项目-es6-tween.zip

    在"es6-tween-master"这个项目中,你可以期待看到如何巧妙地结合ES6的新特性与tween.js库,来创建出流畅、富有表现力的前端动画。通过对这些概念的理解和实践,你将能够提升自己的前端开发技能,打造出更具吸引力的...

    Android-Animation动画之Tween Animation补间动画

    3. **RotateAnimation**:旋转动画使视图绕着一个点旋转,`fromDegrees`和`toDegrees`用于设置开始和结束的旋转角度,`pivotXValue`和`pivotYValue`指定旋转中心点。 4. **AlphaAnimation**:透明度动画控制视图的...

    Tween 动画的旋转缩放透明度和平移 demo

    Tween一词来源于英语“in-between”,意为“两者之间”,在动画领域中,它指的是在两个关键帧之间进行平滑过渡的过程。在本示例中,“Tween动画的旋转缩放透明度和平移 demo”着重展示了如何通过Tween动画实现对象的...

    tween-engineer 官方文档翻译成中文

    1. 使用 Timeline.createSequence() 方法来创建一个动画序列。 2. 使用 push() 方法来添加动画到序列中。 3. 使用 beginParallel() 方法来同时播放多个动画。 4. 使用 end() 方法来结束动画序列。 5. 使用 ...

    tween动画演示

    Tween,源自英文“in between”,意为“介于之间”,在动画领域中,它指的是从一个状态平滑地过渡到另一个状态的过程。这种技术常用于2D和3D图形,网页设计,移动应用,以及各种软件界面中的动态效果。 在描述中...

    tween自动动画

    “tween-master”这个文件可能是一个包含Tween动画示例代码或库的项目。通常,这样的项目会包含多个示例脚本和说明文档,帮助开发者理解和学习如何使用Tween技术。开发者可以通过研究这些示例,掌握如何在自己的项目...

    tween动画效果

    除了以上基本的Tween动画,还可以通过`AnimationSet`类组合多个动画,创建更复杂的动画序列。`AnimationSet`允许开发者同时运行多个动画,或者按照特定顺序播放它们。 在实际开发中,通常会使用XML资源文件来定义...

    android Tween动画的xml实现

    例如,我们可以创建一个名为`slide_in_from_left.xml`的文件,用于实现从左侧滑入的动画: ```xml android:fromXDelta="-100%" android:toXDelta="0%" android:duration="500"/> ``` 在这个例子中,`<set>`...

    Android 游戏开发之Tween动画的实现

    它是Android动画系统中的一个重要组件,用于执行基于属性的动画。通过`ObjectAnimator.ofFloat()`或`ObjectAnimator.ofInt()`方法,我们可以指定目标对象和要动画化的属性。例如,要让一个View平滑地移动,可以创建...

    Tween和Frame动画的一个小总结

    这个Tween动画由两个scale和一个rotate元素组成,第一个scale让对象放大,第二个scale和rotate则让对象缩小并旋转,整个过程通过设置不同的interpolator(插值器)和duration(持续时间)实现平滑过渡。 其次,...

Global site tag (gtag.js) - Google Analytics