Presentation is loading. Please wait.

Presentation is loading. Please wait.

Animation in Java Disclaimer Rendering Performance Rendering or Performance issues are not covered here.

Similar presentations


Presentation on theme: "Animation in Java Disclaimer Rendering Performance Rendering or Performance issues are not covered here."— Presentation transcript:

1 Animation in Java behumble@hanjava.net

2 Disclaimer Rendering Performance Rendering or Performance issues are not covered here

3 Simplest Example

4 Using Timer

5 2 Timers in Java World java.util.Timer –for general use calls java.util.TimerTask instance –good for scheduling tasks specifying time for task javax.swing.Timer –GUI specific calls java.awt.event.ActionListener instance –called on EDT

6 Working Implementation Example1 labelPanel.getObj()

7 Code & Demo of Example 1 timer = new Timer(10, new ActionListener() { public void actionPerformed(ActionEvent e) { if(xPos < xEndPos) { xPos += xDiff; JComponent obj = labelPanel.getObject(); obj.setLocation( xPos, obj.getY() ); } else { timer.stop(); xPos = 0; } }); timer.start();

8 Is it enough? What about –Repetition –Duration –On slow machine –Non-linear interpolation –Reverse direction Back and Forth

9 Time based animation v = f(t)

10 Key Concepts of Timing Model Cycle –Smallest unit for animation Envelope –container of same cycles TimingController –uses Cycles & Envelopes –Synthesize TimingEvent(s) TimingTarget –Interface we should implements –Modify value based on timing event

11 Cycle

12 Envelope

13 Envelope ( bonus ) Repeat Behavior –FORWARD or REVERSE –at the end of each cycles End Behavior –HOLD or RESET –at the end of the Envelope

14 Timing Target Interface we should implement callback for timing events where the formula (v=f(t)) resides

15 Example 2 // duration : 1s, resolution : 10 ms Cycle horizontalCycle = new Cycle( 1000, 10 ); // repeat 5 times, beginning delay : 0 ms Envelope simpleEnv = new Envelope( 5, 0, Envelope.RepeatBehavior.FORWARD, Envelope.EndBehavior.HOLD ); TimingTarget tt = new TimingTarget() { public void begin() {} public void end() {} public void timingEvent(long cycleElapsedTime, long totalElapsedTime, float fraction) { int x = (int)(fraction * 400); JComponent obj = labelPanel.getObject(); obj.setLocation( x, obj.getY() ); } }; TimingController controller = new TimingController( horizontalCycle, simpleEnv ); controller.addTarget( tt ); controller.start();

16 Demo of Example 2 Duration Resolution Beginning delay Repeat Count Repeat Behavior

17 Hardcore Animation Non-linear Interpolation Acceleration Deceleration Property Range Object Modifier Trigger Multi-Step Animation

18 Non-linear Interpolation Real World is non-linear –Gravity, Acceleration, friction… Non-linear movement looks more natural see KeySplines, KeyFrames Ease-inEase-in, Ease-out Quick Start

19 Acceleration / Deceleration Simple & useful non-linear interpolation Float value between 0 and 1 Fraction of time spent speeding up or slowing down Demo please –modifying Example 2

20 Property Setter Property is CBD term for field or member variable Animate property of JavaBeans Consists of –PropertyRange property name + value range int, double, float, Dimension, Point, Color, Rectangle –Object modifier implements TimingTarget

21 Example 3 & Demo Cycle horizontalCycle = new Cycle( 1000, 10 ); Envelope simpleEnv = new Envelope( 1, 0, RepeatBehavior.REVERSE, EndBehavior.HOLD ); Rectangle from = new Rectangle( 0, 0, 0, 0 ); Rectangle to = new Rectangle( 100, 100, 200, 200 ); PropertyRange boundsRange = PropertyRange.createPropertyRangeRectangle("bounds", from, to); TimingTarget tt = new ObjectModifier( labelPanel.getObject(), boundsRange ); TimingController controller = new TimingController( horizontalCycle, simpleEnv ); controller.addTarget( tt ); controller.start();

22 Trigger Utilities to reduce event listener code Useful for –Hover effect for buttons –Pulsating effect for focus events –Animation on action events ActionTrigger, ButtonStateTrigger, ComponentFocusTrigger, TimingTrigger

23 Trigger Example from JavaOne2006 TS-1297 Slide

24 Multi-Step Animations KeyValues, KeyTimes, KeySplines, KeyFrames (Example 4) Cycle horizontalCycle = new Cycle( 1000, 10 ); Envelope simpleEnv = new Envelope( 1, 0, REVERSE, HOLD ); Point from = new Point( 0, 10 ); Point mid = new Point ( 10, 300 ); Point to = new Point( 400, 100 ); // variable length arguments KeyValues values = KeyValues.createKeyValues(from, mid, to); KeyFrames frames = new KeyFrames( values ); PropertyRange boundsRange = new PropertyRange("location", frames ); TimingTarget tt = new ObjectModifier( labelPanel.getObject(), boundsRange ); TimingController controller = new TimingController( horizontalCycle, simpleEnv ); controller.addTarget( tt ); controller.start();

25 Application Not only for location, size, bounds can apply for everywhere Example 5 – Fading Animation Demo

26 Reference Timing is Everything –http://today.java.net/pub/a/today/2005/02/15/ti ming.htmlhttp://today.java.net/pub/a/today/20 05/02/15/timing.htmlhttp://today.java.net/pub/a/today/2005/02/15/ti ming.htmlhttp://today.java.net/pub/a/today/20 05/02/15/timing.html Time Again –http://today.java.net/pub/a/today/2006/03/16/ti me-again.htmlhttp://today.java.net/pub/a/today/2006/03/16/ti me-again.html Timing Framework –http://timingframework.dev.java.net/http://timingframework.dev.java.net/ JavaOne 2006 TS-1297 “Filthy Rich Clients: Animated Effects in Swing Applications”


Download ppt "Animation in Java Disclaimer Rendering Performance Rendering or Performance issues are not covered here."

Similar presentations


Ads by Google