Image and ImageItem

Một phần của tài liệu lập trình ứng dụng trên thiết bị di động (Trang 40)

Khúc Thanh Sơn-K51MMT

41

Cố định ( Immutable): thường được nạp từ resource của ứng dụng,từ file hay chuyển từ dạng Image có thể thay đổi sang. Dạng hình ảnh này chủ yếu được dùng làm biểu tượng cho các thành phần đồ họa khác như ChoiceGroup, Form, List, Alert…Một khi đã tạo đối tượng kiểu Immutable Image thì không thể thay đổi hình ảnh được nữa.

Có thể thay đổi ( Mutable): có thể thay đổi một cách dễ dàng. Khi tạo ra đối tượng Mutable Image, một vùng nhớ trống sẽ được cấp phát dựa trên kích thước trước khi khai báo. Khi muốn hiển thị Image dạng này lên màn hình phải gọi phương thức paint() của lớp Canvas.

Các phương thức và chức năng của lớp Image:

Javax.microedition.lcdui.Image

Phương thức Chức năng

Static Image createImage(String name) Tạo một đối tượng Immutable Image từ

resource

Static Image createImage(Image source) Tạo một đối tượng Immutable Image từ

một đối tượng Image source khác Static Image createImage(byte[]data,int

offset,int length)

Tạo một đối tượng Immutable Image từ mảng dữ liệu(lấy length bytes từ vị trí

offset của mảng byte data) Static Image createImage(int width,int

height)

Tạo đối tượng Mutable Image,cho trước kích thước dài rộng của hình ảnh

Graphics getGraphics() Lấy đối tượng Graphics của Mutable

Image

Int getHeight() Lấy chiều cao của Image

Int getWidth() Lấy chiều rộng của Image

Boolean isMutable() Kiểm tra đối tượng có là Mutable Image

hay không

Khúc Thanh Sơn-K51MMT

42

Lớp ImageItem cung cấp các phương thức để điều khiển và sắp xếp các đối tượng Image được gắn trong Form. Lớp ImageItem đã cung cấp sẵn các định dạng vị trí sẵn cho các hình ảnh gồm:

LAYOUT_DEFAULT:dùng định dạng mặc định của thiết bị LAYOUT_LEFT:canh trái

LAYOUT_RIGHT:canh phải LAYOUT_CENTER:canh giữa

LAYOUT_NEWLINE_BEFORE:xuống hàng trước khi vẽ Image LAYOUT_NEWLINE_AFTER:xuống hàng sau khi vẽ Image

Các phương thức và chức năng của lớp ImageItem:

Javax.microedition.lcdui. ImageItem

Phương thức Chức năng (adsbygoogle = window.adsbygoogle || []).push({});

ImageItem(String label,Image img,int layout,String altText)

Tạo một đối tượng ImageItem từ đối tượng Image img,với định dạng

layout,và chuỗi thay thế altText(cuohuoioc này sẽ thay thế khi hình ảnh không hiển thị lên màn hình)

Image getImage() Lấy đối tượng Image của ImageItem

Void setImage(Image img) Gán đối tượng Image cho ImageItem

Int getLayout() Lấy giá trị định dạng cho ImageItem

Void setLayout(int layout) Gán giá trị định dạng cho ImageItem

String getAltText() Lấy giá trị chuỗi thay thế

Void setAltText() Gán giá trị chuỗi thay thế

Khúc Thanh Sơn-K51MMT

43 3.3.6 Canvas

Canvas là lớp con của lớp Displayable (ngang cấp với Screen), nghĩa là có thể gắn thêm các đối tượng Command vào Canvas để bắt sự kiện. Khi sử dụng, không tạo trực tiếp thêm một đối tượng Canvas mà xây dựng một lớp con kế thừa lớp này và xử lý các chức năng đồ họa của chương trình bên trong lớp con này.

Ví dụ:

Class myTest extends Canvas implements CommandListener{ …

Command cmdExit=new Command(“Exit”,Command.EXIT,1); addCommand(cmdExit);

setCommandListener(this); ….

}

myTest myCanvas=new myTest(this); display.setCurren(myCanvas);

- Hệ tọa độ trong lập trình J2ME giống như trong Windows, gốc (0,0) nằm ở góc trái trên của màn hình. Tung độ y tăng dần từ trên xuống, hoành độ x tăng dần từ trái sang phải. Độ dày mặc định của các đối tượng đồ họa trong J2ME là 1pixels.

-Đối tượng Canvas đặc trưng bởi 2 giá trị là chiều dài và chiều rộng. Hai giá trị này là cố định cho các đối tượng Canvas khác nhau được tạo lập trong cùng một thiết bị và phụ thuộc vào loại thiết bị di động.

-Vẽ đối tượng trên Canvas ta dùng phương thức paint() với khai báo là abstract, nghĩa là viết xử lý cho phương thức này ở lớp con của Canvas

Abstract public class Displayable{ Abstract void paint(Graphics g);

Khúc Thanh Sơn-K51MMT

44 }

Public abstract class Canvas extends Displayabe{ Protected abstract void paint(Graphics g); }

….

Các phương thức hỗ trợ vẽ của lớp Canvas:

Javax.microedition.lcdui.Canvas

Phương thức Chức năng

Abstract void paint(Graphics g) Vẽ đối tượng g lên Canvas (adsbygoogle = window.adsbygoogle || []).push({});

Final void repaint() Yêu cầu vẽ Canvas

Final void repaint(int x,int y,int width,int height)

Yêu cầu vẽ 1 cùng của Canvas với tọa độ và kích thước tương ứng

Final void serviceRepaints() Xử lý các yêu cầu vẽ còn treo

Boolean isDoubeBuffered() Kiểm tra thiết bị có hỗ trợ hai buffer

không

Bảng 14. Các phương thức hỗ trợ vẽ của lớp Canvas:

Phương thức paint() dùng để xử lý các sự kiện vẽ trong đối tượng Canvas. Nhưng khi yêu cầu thiết bị vẽ lại màn hình thì không gọi trực tiếp phương thức paint() mà gọi phương thức repaint(). Phương thức repaint() này sẽ gọi hàm paint() để vẽ lại toàn bộ hay một phần màn hình.

Phương thức serviceRepaints() yêu cầu tất cả các yêu cầu vẽ trước đó phải được thực hiện ngay. Do đó, khi gọi phương thức này các tiến trình khác sẽ bị block cho đến khi tất cả các phương thức vẽ được gọi.

Khúc Thanh Sơn-K51MMT

45 3.3.7 Graphics

Đối tượng Graphics dùng để vẽ lên màn hình Canvas. Lớp Graphics cung cấp sẵn 30 phương thức hỗ trợ vẽ các đối tượng cơ bản (đường thẳng, đường tròn, hình chữ nhật..) text, các điều khiển màu sắc, phông chữ…

Có thể sử dụng lớp Graphics trong hai trường hợp: Trong phương thức paint() của Canvas:

Protected void paint(Graphics g){ ….}

Đối tượng Graphics này chỉ có giá trị bên trong phương thức paint(),ra khỏi phương thức này thì không còn dùng được vẽ lên Canvas nữa

Trong các đối tượng mutable image:

Các mutable image thường được tạo từ file hay resource, có tính cố định,không thay đổi.Do đó, người ta thường dùng immutable image làm biểu tượng cho các thành phần trong ChoiceGroup, Form, List,hay Alert.

Ngược lại, đối tượng mutable image chỉ là một vùng nhớ có kích thước cố định được cấp khi khởi tạo.

Ví dụ: Image image = new Image.createImage(80,20); Graphics gGraphics = iImage.getGraphics();

Đối tượng Graphics được tạo như thế này có cùng giá trị với đối tượng Image. Khi đối tượng Image bị hủy thì đối tượng Graphics cũng bị hủy theo.

Các phương thức và chức năng của lớp Graphics:

Javax.microedition.lcdui. Graphics

Phương thức Chức năng

Void setColor(int RGB)

Gán giá trị màu sắc,kết hợp các giá trị 3 màu cơ bản(đỏ,lục,xanh dương) trong

Khúc Thanh Sơn-K51MMT

46

Void setColor(int red,int green,int blue) Gán giá trị màu theo các thành phần riêng biệt

Int getColor() Lấy giá trị màu

Int getBlueComponent() Lấy giá trị thành phần màu xanh dương (adsbygoogle = window.adsbygoogle || []).push({});

trong đối tượng

Int getGreenComponent() Lấy giá trị thành phần màu xanh lục

trong đối tượng

Int getRedComponent() Lấy giá trị thành phần màu xanh đỏ

trong đối tượng

Void setGrayScale(int value) Gán giá trị grayscale

Ing getGrayScale() Lấy giá trị grayscale hiện tại

Int getStrokeStyle() Lấy kiểu nét vẽ

Void setStrokeStyle(int style)

Gán kiểu nét vẽ,style có thể mang 1 trong 2 giá trị Graphics.DOTTED và

Graphics.SOLID

Khúc Thanh Sơn-K51MMT

47

Chương 4. XÂY DỰNG ỨNG DỤNG THỬ NGHIỆM TRÊN DI ĐỘNG

4.1 Giới thiệu về ứng dụng

Em lựa chọn đề tài “Lập trình ứng dụng trên thiết bị di động” bằng ngôn ngữ J2ME với ứng dụng cụ thể là “Trình chiếu các hiệu ứng ảnh trên điện thoại di động”. Chương trình là một ứng dụng hoàn thiện, bao gồm các chức năng như hiển thị ảnh dưới dạng một list các hình ảnh. Người dùng có thể tác động bằng cách chọn lần lượt hoặc dưới dạng tự động chuyển đổi giữa các ảnh.

Khi thực hiện đề tài này,mục tiêu em mong muốn đạt được là :

• Hiểu chi tiết về J2ME và ứng dụng của nó để lập trình trên các thiết bị di động.

• Nắm được các kỹ thuật xử lý Form, hình ảnh, và lưu trữ trên điện thoại di động

• Ứng dụng các kết quả đạt được để xây dựng chương trình đơn giản, có các tiện

ích phục vụ nhu cầu của người sử dụng di động.

• Áp dụng thành công trên một số dòng máy điện thoại di động có hỗ trợ Java của các hãng như Nokia, Sony, Samsung…

4.2 Các chức năng chính

Khi người dùng vào chương trình, sẽ có một màn hình với các menu chính, với mỗi một biểu tượng sẽ đi kèm với một chức năng có chữ mô tả phía dưới, khi ta chọn chức năng nào thì từ màn hình chờ đó sẽ được chuyển vào chức năng chi tiết.

Khúc Thanh Sơn-K51MMT

48

Hình 11. Sơ đồ tổng quan giao diện chương trình

4.2.1 Xem album

Khi vào chức năng này,người dùng sẽ được thấy hiệu ứng các ảnh thể hiện dưới dạng một list. Màn hình sẽ được chia thành hai phần,phần phía trên chiếm không gian lớn dùng để hiển thị ảnh lớn (được tạo sẵn trong thư mục res của chương trình), còn phía dưới là list ba hình ảnh nhỏ đã được resize từ chính ảnh lớn ban đầu (trong thư mục res) để ta có thể lựa chọn ảnh hiển thị bằng cách dùng phím trái phải, hoặc lên xuống.

4.2.2 Xem slide (adsbygoogle = window.adsbygoogle || []).push({});

Với chức năng này,người sử dụng sẽ không được tương tác với các ảnh mà các ảnh sẽ được trình diễn một cách tự động. Với mỗi ảnh sẽ có một hiệu ứng chuyển cảnh đi kèm và cứ chuyển đổi cho đến khi tất cả các ảnh trong thư mục res(thư mục chứa tài nguyên của chương trình) đã được trình diễn xong. Muốn trình diễn lại, người sử dụng có thể dùng chức năng “Xem lại” trong màn hình chức năng tương ứng.

Người sử dụng Màn hình chờ Xem album Xem slide Trợ giúp Liên hệ Download

Khúc Thanh Sơn-K51MMT

49 4.2.3 Trợ giúp

Chức năng này bao gồm các thông tin như tên ứng dụng, version của ứng dụng, người xây dựng và người hướng dẫn cùng với một số các hướng dẫn cơ bản để người sử dụng có thể biết cách cài đặt và chạy chương trình trên điện thoại di động.

4.2.4 Liên hệ

Chức năng này cung cấp các thông tin về tác giả ứng dụng như họ và tên,trường đại học và một số thông tin để liên hệ khi người dùng cần trợ giúp có thể liên hệ trực tiếp.

4.2.5 Download

Đây là chức năng khi điện thoại có kết nối GPRS có thể download ứng dụng này từ trên một server nào đó trên internet, hoặc update phiên bản mới nhất của ứng dụng hoặc có thể đọc hướng dẫn trực tuyến. Tuy nhiên ứng dụng này chỉ tập trung vào xử lý hiệu ứng ảnh nên chức năng này chỉ để như là một phần giới thiệu.

4.3 Cách thức làm chương trình

Chương trình bao gồm các hàm và ý nghĩa như sau:

• Photos.java: Đây là file chính của chương trình, gồm đầy đủ ba hàm theo chu trình sống của một MIDlet.

• AppCanvas.java: File này dùng để khai báo các đối tượng(như các file ảnh dùng để vẽ background của chương trình), cũng như là các hàm dùng chung cho cả chương trình như draw(), redraw () hay paint().

Khúc Thanh Sơn-K51MMT

50

• Screen.java: Đây chính là File dùng để khai báo các file ảnh khi hiển thị, cách thức vẽ chúng lên màn hình, định nghĩa các phím chức năng khi sử dụng chương trình(up, down, left, right,…).

• MainMenu.java: File này dùng để tạo ra giao diện chính của chương trình. Nó bao gồm một biểu tượng ở giữa cố định xuất hiện khi khởi động cũng như khi vào màn hình chờ. Tại màn hình chờ sẽ có năm biểu tượng quay xung quanh biểu tượng giữa tương ứng với nó là năm chức năng chính của chương trình là Xem album, Xem slide, Trợ giúp, Liên hệ, và Download.

Trong File này, có các hàm nêu lên cách thức vẽ năm biểu tượng đó và cách di chuyển xoay vòng. Năm biểu tượng sẽ được xoay theo hình tròn và với mỗi vỡi biểu tượng bất kỳ, luôn có hai biểu tượng ở quanh nó. Khi ta nhấp phím trái hoặc phải chọn biểu tượng nào thì biểu tượng ở phía trái hoặc phải đó sẽ hiển thị ra ở giữa và lớn nhất, và các biểu tượng xung quanh sẽ bé lại và chờ đợi đến lượt chọn. Phía dưới các biểu tượng hiện các chữ ghi đi kèm với chức năng tương ứng của biểu tượng đó.

• About.java:File này dùng để viết thông tin về tác giả cùng các thông tin liên hệ. Ta dùng hàm drawString() để khởi tạo các dòng chữ hiển thị cũng như là canh lề giữa cho chúng.

• Help.java: File này dùng để viết một số thông tin về sản phẩm, như người làm, giảng viên hướng dẫn và cách thức sử dụng.

• ViewAlbum.java: Đây là File thể hiện hiệu ứng ảnh dạng List. Ở file này màn hình sẽ chia thành 2 phần. Phần phía trên sẽ là phần để cho vẽ ảnh lớn khi thể hiện, còn phía dưới sẽ là một list ba ảnh, đã được resize lại. Chúng sẽ được vẽ theo thứ tự từ ảnh đầu tiên cho đến ảnh cuối cùng.Khi ta bấm chọn để hiển thị một ảnh nào, ảnh đó sẽ được đánh dấu bằng viền đen xung quanh và hiện lớn ở phía trên, đồng thời ba ảnh phía dưới sẽ được vẽ lại và bức ảnh vị trí vừa được chọn sẽ được lùi sang trái một bức. Cứ như vậy chúng ta sẽ bấm các phím

Khúc Thanh Sơn-K51MMT

51

trái,phải hoặc lên xuống để chọn lựa lần lượt từng ảnh một. Ngôn ngữ J2ME chỉ chấp nhận các ảnh *.png và có kích thước khoảng 320x240 pixels).

• ViewSlide.java: File này cũng thể hiện hiệu ứng của ảnh nhưng dưới dạng trình chiếu tự động. Khi ta vào chức năng này, các ảnh sẽ tự động trình chiếu mà không cần tác động thao tác nào từ người dùng. Các file ảnh sẽ tự động trình chiếu theo thứ tự cho đến hết và dừng lại. Nếu người dùng muốn trình chiếu tiếp thì có thể bật lại để xem lại. Để làm được điều này,ta sử dụng một thư viện có sẵn là ImageFx.jar trong đó chứa một số các hàm như BlindsFx, ExplodeFx, PuzzleFx, SlideFx…để tạo hiệu ứng chuyển cảnh cho các ảnh một cách tự động.

• DownloadScreen.java: File này có ba chức năng được thể hiện ở dạng list để người dùng có thể tương tác với ứng dụng trực tiếp từ internet nếu di động có kết nối GPRS. Tuy nhiên do không có Server để thử nghiệm, nên chức năng này chỉ có chức năng giới thiệu.

• Define.java: Dùng để định nghĩa các phím bấm trên bàn phím trên di động với

mã code tương ứng.

• Keyboard.java: File này chứa các hàm viết các chức năng tương ứng với các (adsbygoogle = window.adsbygoogle || []).push({});

mã code của các phím tương ứng được định nghĩa trong file Define.java. Ví dụ như phím K_UP là dùng để di chuyển lên trên, K_FIRE là dùng khi ta lựa chọn một chức năng nào đó…

• DisplayManager.java: File này chứa các hàm dùng để hiển thị qua lại giữa các màn hình chức năng. Ta có thể chọn một chức năng, hoặc quay lại chức năng trước đó, hoặc có thể là quay lại màn hình chờ ban đầu tùy thích.

• ScrollableText.java: File này chức các hàm dùng để điều khiển sự hiển thị chữ trên màn hình. Khi ta khai báo một xâu rất dài, và muốn xuống dòng ta có thể dùng dấu ‘~’ đặt trước ký tự muốn xuống dòng. Dấu ‘~’ đã được định nghĩa trong File này với chức năng tạo xuống dòng ở vị trí tùy ý. Ngoài ra File này còn tạo ra các thanh cuộn dọc xuống nếu nội dung xâu đưa vào dài hơn chiều

Khúc Thanh Sơn-K51MMT

52

dài màn hình để người dùng có thể kéo xuống xem nội dung bị che khuất phía dưới.

• ScrollableList.java: File này dùng để tạo ra các text list và ngăn cách nhau bởi các dấu gạch ngang. Tác dụng của File này nhằm thể hiện giao diện phần Download, với ba chức năng được sắp xếp ở dạng list.

• AlertScreen.java: File này dùng để tạo một khung thông báo khi ta định thoát chương trình. Khi ta bấm thoát khỏi chương trình, một khung thông báo sẽ hiện lên với hai sự lựa chọn là “Có” hoặc “Không” để ta có thể lựa chọn.

4.4 Cài đặt và chạy chương trình

4.4.1 Yêu cầu phần mềm

JDK (Java Development Kits): Dùng để thiết lập môi trường Java cho máy tính. Ta có thể vào trang http://java.sun.com/javase/downloads/index.jsp để

down bộ JDK mới nhất về.

Sun J2ME Wireless Toolkit 2.5: Phần mềm biên dịch mã nguồn và chạy thử nghiệm chương trình. Ta có thể down bản mới nhất tại :

http://java.sun.com/j2me/download.html

• Ngoài ra ta còn cần một số các công cụ hỗ trợ việc lập trình như : Eclipse với EclipseME plug-in, NetBeans, JBuilder.

Download các công cụ trên tại :

Eclipse : http://www.eclipse.org/downloads/

Netbeans: http://netbeans.org/

Jbuilder: http://www.brothersoft.com/jbuilder-2007-enterprise-for-window- 69384.html

Khúc Thanh Sơn-K51MMT

Một phần của tài liệu lập trình ứng dụng trên thiết bị di động (Trang 40)