All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.qozix.animation.TweenHandler Maven / Gradle / Ivy

Go to download

The TileView widget is a subclass of ViewGroup that provides a mechanism to asynchronously display tile-based images, with additional functionality for 2D dragging, flinging, pinch or double-tap to zoom, adding overlaying Views (markers), built-in Hot Spot support, dynamic path drawing, multiple levels of detail, and support for any relative positioning or coordinate system.

The newest version!
package com.qozix.animation;

import java.util.ArrayList;

import android.os.Handler;
import android.os.Message;

public class TweenHandler extends Handler {

	private static final int RENDER = 1;
	
	private static TweenHandler instance = null;
	public static TweenHandler getInstance(){
		if(instance == null){
			instance = new TweenHandler();
		}
		return instance;
	}
	
	private ArrayList tweens = new ArrayList();
	
	public void addTween( Tween tween ) {
		tweens.add( tween );
		sendEmptyMessage( RENDER );
	}
	
	public void removeTween( Tween tween ) {
		tweens.remove( tween );
		if( tweens.size() == 0 ) {
			if( hasMessages( RENDER ) ) {
				removeMessages( RENDER );
			}
		}
	}
	
	@Override
	public void handleMessage( final Message message ) {
		boolean tweensAreRunning = false;
		ArrayList condemned = new ArrayList();
		for( Tween tween : tweens ) {
			boolean tweenIsComplete = runTween( tween );
			if( !tweensAreRunning ) {
				if( !tweenIsComplete ) {
					tweensAreRunning = true;
				}
			}
			if( tweenIsComplete ){
				condemned.add( tween );
			}
		}
		if( tweensAreRunning ) {
			sendEmptyMessage( RENDER );
		} else {
			if( hasMessages( RENDER ) ) {
				removeMessages( RENDER );
			}
		}
		tweens.removeAll( condemned );
	}
	
	private boolean runTween( Tween tween ) {
		double ellapsed = System.currentTimeMillis() - tween.getStartTime();
		ellapsed = Math.min( ellapsed, tween.getDuration() );
		tween.setEllapsed( ellapsed );
		double progress = tween.getProgress();
		double eased = tween.getEasedProgress();
		for ( TweenListener l : tween.getTweenListeners() ) {
			l.onTweenProgress( progress, eased );
		}
		boolean complete = ellapsed >= tween.getDuration();
		if ( complete ) {			
			for ( TweenListener l : tween.getTweenListeners() ) {
				l.onTweenComplete();
			}
		}		
		return complete;		
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy