Xây dựng màn hình chờ bằng Canvas

Bây giờ, chúng ta sẽ xây dựng màn hình chờ gọi là WatiCanvas, nó được kế thừa từ Canvas. Nó sẽ hiển thị một bánh xe quay và các tính năng nhắn tin có thể được cập nhật tự động. Để chuyển động bánh xe, tôi sử dụng thêm một thread (một Timer) được khởi tạo trong constructor của WaitCanvas. Sơ đồ thread bây giờ bao gồm một thread màu hồng cho các chuyển động của màn hình chờ.

Xây dựng lớp WaitCanvas như sau:

import java.util.*;

import javax.microedition.lcdui.*;

public class WaitCanvas    extends Canvas {

private int mCount, mMaximum;
private int mInterval;
private int mWidth, mHeight, mX, mY, mRadius;
private String mMessage;

public WaitCanvas() {

mCount = 0;
mMaximum = 36;
mInterval = 100;

mWidth = getWidth();
mHeight = getHeight();

// Calculate the radius.

int halfWidth = (mWidth mRadius) / 2;
int halfHeight = (mHeight mRadius) / 2;
mRadius = Math.min(halfWidth, halfHeight);

// Calculate the location.

mX = halfWidth mRadius / 2;
mY = halfHeight mRadius / 2;

// Create a Timer to update the display.

TimerTask task = new TimerTask() {

public void run() {

mCount = (mCount + 1) % mMaximum;
repaint();

}

};

Timer timer = new Timer();
timer.schedule(task, 0, mInterval);

}

public void setMessage(String s) {

mMessage = s;
repaint();

}

public void paint(Graphics g) {

int theta = (mCount * 360 / mMaximum);

// Clear the whole screen.

g.setColor(255, 255, 255);
g.fillRect(0, 0, mWidth, mHeight);

// Now draw the pinwheel.

g.setColor(0, 0, 0);
g.drawArc(mX, mY, mRadius, mRadius, 0, 360);
g.fillArc(mX, mY, mRadius, mRadius, theta + 90, 90);
g.fillArc(mX, mY, mRadius, mRadius, theta + 270, 90);

// Draw the message, if there is a message.

if (mMessage != null)

g.drawString(mMessage, mWidth / 2, mHeight, Graphics.BOTTOM | Graphics.HCENTER);

}

}

Để sử dụng lớp WaitCanvas, ta xây dựng 2 lớp sau: DeluxeWorker và DeluxeMIDlet. Lúc đó, giao diện của nó có dạng sau:

Đây là toàn bộ code của bài vết này.

Bạn thấy bài viết này hế nào?

Các bài viết liên quan:
Sử dụng Thread hiệu quả trong J2ME – Phan 1
Sử dụng Thread hiệu quả trong J2ME – Phan 2
Sử dụng Thread hiệu quả trong J2ME – Phan 3