-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathAnimationSample.java
135 lines (106 loc) · 3.37 KB
/
AnimationSample.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
* Java
*
* Copyright 2016-2022 MicroEJ Corp. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be found with this software.
*/
package com.microej.howto.microui.animation;
import ej.bon.TimerTask;
import ej.microui.MicroUI;
import ej.microui.display.Colors;
import ej.microui.display.Display;
import ej.microui.display.Displayable;
import ej.microui.display.GraphicsContext;
import ej.microui.display.Image;
import ej.microui.display.Painter;
import ej.mwt.animation.Animation;
import ej.mwt.animation.Animator;
/**
* This class shows how to create an animation using MicroUI and MWT Animator.
*
* <p>
* It will draw the MicroEJ robot moving from one side of the screen to the other.
* </p>
*
* Note that the whole display is redrawn on every frame.
*
* @see TimerTask
*/
public class AnimationSample extends Displayable {
private static final int ABSOLUTE_INCREMENT = 1;
private static final int LEFT_LIMIT = 0;
private int imageX;
private final Image image;
// Animation variables
private final int rightLimit;
private int horizontalIncrement = ABSOLUTE_INCREMENT;
/**
* Instantiates an AnimationSample.
*/
public AnimationSample() {
final Display display = Display.getDisplay();
this.image = Image.getImage("/images/mascot.png"); //$NON-NLS-1$
this.rightLimit = display.getWidth() - this.image.getWidth();
// Starts at the centerX of the screen.
this.imageX = display.getWidth() / 2 - this.image.getWidth();
display.requestShow(this);
}
/**
* Animator doing an horizontal linear motion of MicroEJ.
*/
private void animate() {
Animation animation = new Animation() {
@Override
public boolean tick(long platformTimeMillis) {
AnimationSample.this.imageX += AnimationSample.this.horizontalIncrement;
if (AnimationSample.this.imageX > AnimationSample.this.rightLimit) {
AnimationSample.this.imageX = AnimationSample.this.rightLimit;
AnimationSample.this.horizontalIncrement = -ABSOLUTE_INCREMENT;
} else {
if (AnimationSample.this.imageX < LEFT_LIMIT) {
AnimationSample.this.imageX = LEFT_LIMIT;
AnimationSample.this.horizontalIncrement = ABSOLUTE_INCREMENT;
}
}
AnimationSample.this.requestRender();
return true;
}
};
Animator animator = new Animator();
animator.startAnimation(animation);
}
@Override
public void render(GraphicsContext g) {
final Display display = Display.getDisplay();
final int displayWidth = display.getWidth();
final int displayHeight = display.getHeight();
// fill up background with black
g.setColor(Colors.BLACK);
Painter.fillRectangle(g, 0, 0, displayWidth, displayHeight);
// fill up half the area with white
g.setColor(Colors.WHITE);
Painter.fillRectangle(g, 0, 0, displayWidth / 2, displayHeight);
// get imageY to draw it
int imageY = (displayHeight - this.image.getHeight()) / 2;
// draw the image
Painter.drawImage(g, this.image, this.imageX, imageY);
}
/**
* Entry Point for the example.
*
* @param args
* Not used.
*/
public static void main(String[] args) {
// A call to MicroUI.start is required to initialize the graphics
// runtime environment
MicroUI.start();
AnimationSample sample = new AnimationSample();
sample.animate();
}
@Override
public boolean handleEvent(int event) {
// No event handling is required for this sample.
return false;
}
}