Lớp Graphics hỗ trợ một phương thức duy nhất để vẽ hình ảnh lên màn hình, đó là: Lớp Graphics: javax.microedition.lcdui.Graphics
Phương thức Mô tả
void drawImage (Image img, int x, int
y, int anchor)
vẽđối tượng Image img lên màn hình
Bảng 5.15 Vẽ hình ảnh
Đây chỉ là bước cuối cùng để vẽ một hình ảnh lên màn hình, các bước trước đó dùng để tạo đối tượng Image cũng như load hình ảnh lên đối tượng đó. Đối tượng Image gồm hai loại: có thể thay đổi hình ảnh (Mutable Image) và hình ảnh cốđịnh (Immutable Image).
Các bước để vẽđối tượng Image lên màn hình: • Immutable Image:
1.Tạo đối tượng hình ảnh (thường là load trực tiếp từ file):
Image img= Image.createImage (“\imageTest.png”);
2.Hiển thịđối tượng lên màn hình: protected void paint (Graphics g) {
…
g.drawImage(img, 10, 10,
Graphics.LEFT | Graphics.TOP); }
Java Mobile
• Mutable Image:
Khởi tạo đối tượng, yêu cầu chương trình cấp một vùng nhớ với kích thước cho trước của hình ảnh:
Image img = Image.createImage(80,100); Vẽ hình ảnh lên đối tượng :
//lấy đối tượng Graphics tương ứng của đối tượng Image: Graphics g = img.getGraphics();
//dùng đối tượng Graphics vừa lấy vẽ các hình ảnh lên đối tượng Image:
g.fillRoundRect (0, 0, 50, 50, 20, 20); …
Hiển thị hình vừa vẽ lên màn hình: protected void paint (Graphics g) {
…
g.drawImage(img, 10, 10, Graphics.VCENTER | Graphics.HCENTER);
}
Hình 5.7 Vẽ bằng đối tượng Mutable Image
Khi gọi phương thức vẽ đối tượng Image lên màn hình, ta cũng phải truyền các tham số x, y, anchor như khi vẽ text. Tuy nhiên, các loại anchor của hình ảnh tương
đối khác với text, đó là không sử dụng anchor BASELINE(đường chẩn của ký tự / chuỗi) mà thay vào đó là VCENTER để chỉđiểm giữa theo chiều dọc của hình ảnh
Lớp Graphics: javax.microedition.lcdui.Graphics
Tên anchor Mô tả Vị trí
LEFT lề trái của hình ảnh chiều ngang HCENTER điểm giữa của hình ảnh chiều ngang RIGHT lề phải của hình ảnh chiều ngang TOP điểm cao nhất của hình ảnh chiều dọc
Java Mobile
VCENTER điểm giữa của hình ảnh chiều dọc BOTTOM điểm cao nhất của hình ảnh chiều dọc
Bảng 5.16 Giá trị Image Anchor
Hình 5.8 Các định dạng vị trí trong Graphics 5.2.5. Các phương thức tịnh tiến đối tượng:
Để đơn giản khi biểu diễn sự tịnh tiến của các đối tượng hình ảnh trên màn hình, lớp Graphics cho phép người lập trình vẽ các đối tượng ở vị trí cốđịnh. Khi cần tịnh tiến các đối tượng trên màn hình thì chỉ cần tịnh tiến gốc toạđộ đến vị trí mới, các hình ảnh của đối tượng Graphics sẽ tịnh tiến theo.
Lớp Graphics: javax.microedition.lcdui.Graphics
Phương thức Mô tả
void translate(int x, int y) tịnh tiến điểm gốc (0, 0) của đối tượng Graphics
đến vị trí (x,y)
int getTranslateX() lấy khoảng cách trên trục hoành đã bị tịnh tiến int getTranslateY() lấy khoảng cách trên trục tung đã bị tịnh tiến
Bảng 5.17 Các phương thức tịnh tiến
Khi gọi thực hiện phương thức translate() để tịnh tiến hình ảnh trên màn hình thì chỉ
có gốc tọa độ bị thay đổi vị trí, và cũng chỉ có ý nghĩa trong lần gọi hàm đó. Nếu gọi thực hiện phương thức repaint() mà không gọi translate() lần nữa thì toạđộ gốc sẽ trở về vị trí (0,0) ban đầu.
VD:
Java Mobile
protected void keyPressed(int keyCode) { switch (getGameAction(keyCode)) {
... case DOWN:
if ((translatey + img.getHeight() + 1) > getHeight()) translatey = 0; else translatey ++; break; ... } repaint(); }
protected void paint(Graphics g){ if (im != null){
//xoá màn hình
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight()); //tịnh tiến gốc toạđộ
g.translate(translatex, translatey); // luôn vẽở vị trí 0,0
g.drawImage(im, 0, 0, Graphics.LEFT | Graphics.TOP); }
Java Mobile