1 / 26

Animation in Java

Animation in Java. behumble@hanjava.net. D isclaimer. Rendering or Performance issues are not covered here. Simplest Example. Using Timer. 2 Timers in Java World. java.util.Timer for general use calls java.util.TimerTask instance good for scheduling tasks specifying time for task

Download Presentation

Animation in Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Animation in Java behumble@hanjava.net

  2. Disclaimer 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 Property Range Non-linear Interpolation Acceleration Deceleration Trigger Object Modifier Multi-Step Animation

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

  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/timing.htmlhttp://today.java.net/pub/a/today/2005/02/15/timing.html • Time Again • http://today.java.net/pub/a/today/2006/03/16/time-again.html • Timing Framework • http://timingframework.dev.java.net/ • JavaOne 2006 TS-1297 “Filthy Rich Clients: Animated Effects in Swing Applications”

More Related