Download presentation
Presentation is loading. Please wait.
Published byDana O’Connor’ Modified over 9 years ago
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”
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.