1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đề cương lập trình ứng dụng đa phương tiện với android

295 205 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 295
Dung lượng 4,49 MB

Nội dung

Âm thanh, chẳng hạn như giọng nói của con người, chình là một loại phương tiện đó và qua nhiều thế kỉ trước khi chữ viết được sử dụng rộng rãi thí nói chuyện là một cách thức chủ yếu để

Trang 1

MỤC LỤC

Bài 1: Tổng quan về đa phương tiện 5

1.1 Giới thiệu chung 5

1.2 Một số khái niệm cơ bản 6

1.2.1 Thế nào là phương tiện 6

1.2.2 Thế nào là đa phương tiện 6

1.2.3 Thế nào là truyền thông đa phương tiện 7

1.3 Hoàn cảnh sử dụng Multimedia 8

1.4 Các chuẩn Multimedia thông dụng 9

1.5.Tổng quan về quá trình phát triển Multimedia 11

1.6 Ứng dụng đa phương tiện 12

1.6.1 Giáo dục 12

1.6.2 Thông tin và bán hàng 13

1.6.2 Y học 13

1.6.3 Hội thảo trực tuyến 13

1.6.4 Giải trí 13

1.6.5 Công nghiệp du lịch 14

1.6.6 Điều tra tội phạm 14

Bài 2: Vẽ đồ họa 2D 17

2.1 Ví dụ về chương trình đồ họa 2D 17

2.2 Layout 18

2.2.1 Thiết kế Layout bằng XML 18

2.2.2 Hiển thị Layout từ file XML 19

2.2.3 Một số thuộc tính của các đối tượng trong layout 19

2.3 Canvas Drawing 21

2.4 Drawables 29

2.4.1 Drawables là gì? 29

2.4.2 Sử dụng drawables cho views 29

2.4.3 Loading Bitmaps và Drawables 30

2.4.4 XML Drawables 31

2.4.4.1 Shape Drawables 31

2.4.4.2 State Drawables 32

2.4.4.3 Transition Drawables 32

2.4.4.4 Vector drawables 33

2.4.4.6 Animation Drawables 33

Bài 3: Animation 44

3.1 Animation 44

3.1.1 Tween Animation 44

Trang 2

3.1.2 Một số animation thông dụng 45

3.1.3 Các bước thực hiện Animation trong Android 50

3.1.4 Ví dụ về Animation 51

3.2 Tạo ứng dụng đồ họa 2D 57

Bài 4: Bài tập về Canvas, Drawable, Animation 61

Bài 5: Camera 64

5.1 Khai báo Manifest 64

5.2 Tạo ứng dụng Camera sử dụng Intent 65

5.2.1 Image capture intent 65

5.2.2 Video capture intent 66

5.2.3 Receiving camera intent result 67

5.2.4 Chương trình demo sử dụng Camera Intent 68

5.3 Tạo ứng dụng Camera sử dụng lớp Camera 70

5.3.1 Sử dụng lớp Camera 70

5.3.2 Lưu các file Media 75

5.3.2 Camera2 76

5.4 Demo ứng dụng Camera 84

5.4.1 Xây dựng chương trình tự động chụp ảnh sau khoảng thời gian m giây 84

Bài 6: Graphic và Touch Events 89

6.1 Bitmap 89

6.2 Touch Events 95

6.3 Lưu một Bitmap được vẽ Canvas 107

6.4 Xử lý Bitmap 108

Bài 7: OpenGL 111

7.1 Thiết lập môi trường cho OpenGL ES 111

7.1.1 Khai báo sử dụng OpenGL ES trong Manifest 112

7.1.2 Tạo một đối tượng GLSurfaceView 112

7.1.3 Xây dựng lớp Renderer 113

7.2 Tạo các đối tượng hình học 114

7.2.1 Định nghĩa một hình tam giác 114

7.2.2 Define a Square 115

7.2.3 Initialize Shapes 116

7.2.4 Vẽ một đối tượng hình học 116

7.3 Tạo chuyển động cho các đối tượng nhờ OpenGL 120

7.3.1 Define a Projection 120

7.3.2 Define a Camera View 121

7.3.3 Apply Projection và Camera Transformations 122

7.3.4 Rotate a Shape 123

Trang 3

Bài 8: Xây ứng dụng Graphics 125

Bài 9: Giới thiệu về Audio trên Android 126

9.1 Phát lại âm thanh( Audio Playback) 126

9.2 Định dạng âm thanh được hỗ trợ( Supported Audio Formats) 126

9.3 Sử dụng Audio Player có sẵn thông qua Intent( Using the Built-In Audio Player via an Intent) 127

9.4 Tạo một ứng dụng Audio-Playing tùy chỉnh 130

9.4.1 Start Media Player 131

9.4.2 Control Playback 132

9.5 MediaStore cho Audio 138

9.5.1 Truy cập vào Audio từ MediaStore( Accessing Audio from the MediaStore) 138 9.5.2 Duyệt âm thanh trong MediaStore 141

Bài 10: Background và networked Audio 149

10.1 Background Audio Playback 149

10.1.1 Service( dịch vụ) 149

10.2 Networked Audio 167

Bài 11: Audio Capture 189

11.1 Thu âm với Intent 189

11.2 Sử dụng MediaRecorder để thu âm 193

11.2.1 Nguồn MediaRecorder Audio 194

11.2.2 Định dạng đầu ra MediaRecorder 194

11.2.3 Mã hóa âm thanh MediaRecorder 194

11.2.4 MediaRecorder Output and Recording 195

11.3 Xây dựng chương trình AudioCapture 196

Ví dụ Tạo ứng dụn Raw Audio Capture và Playback 218

Bài 12: Bài tập về Audio 227

Bài 13: Giới thiệu về Video 228

13.1 Video Playback 228

13.1.1 Những định dạng được hỗ trợ 228

13.1.2 Phát lại sử dụng intent 229

13.1.3 Phát lại sử dụng VideoView 231

13.1.4 Thêm Controls với MediaController 233

13.2 Playback sử dụng MediaPlayer 234

13.2.1 Trạng thái MediaPlayer 234

13.3 Tạo chương trình phát Video sử dụng MediaPlayer 235

Bài 14: Video nâng cao 249

14.1 Lấy Video từ MediaStore 249

14.2 Video Thumbnail từ MediaStore 250

Trang 4

14.3 Tạo ứng dụng phát video sử dụng MediaStore 250

14.4 Networked Video 255

14.4.1 Các giao thức mà Android hỗ trợ 255

14.4.2 Network Video Playback 257

Bài 15: Quay Video 265

15.1 Quay Video sử dụng Intent 265

15.2 Tạo ứng dụng quay Video tùy chỉnh 270

15.2.1 MediaRecorder for Video 270

15.2.2 Nguồn Audio và Video 270

15.2.3 Định dạng của file thu được 271

15.2.4 Mã hóa âm thanh và video 272

15.2.5 Bitrate của âm thanh và video: 272

15.2.6 Thiết lập tần số âm thanh 273

15.2.7 Kênh âm thanh 273

15.2.8 Số lượng khung hình của Video trong 1 giây 273

15.2.9 Độ phân giải của Video 273

15.2.7 Giới hạn dung lượng của video 273

15.2.8 Thời lượng tối đa 274

15.2.9 Profile 274

15.2.10 Vị trí lưu 275

15.2.11 Preview Surface 276

Bài 16: Tạo ứng dụng Video 283

Bài 17: Xuất bản Media sử dụng Webservices 284

17.1 Web Services 284

17.2 HTTP Requests 284

17.3 JSON (JavaScript Object Notation) 286

15.4 Pulling Flickr hình ảnh sử dụng JSON 289

TÀI LIỆU THAM KHẢO 295

Trang 5

Bài 1: Tổng quan về đa phương tiện

1.1 Giới thiệu chung

Sản phẩm của công nghệ Multimedia đã và đang xâm nhập ngày càng sâu, rộng vào mọi lĩnh vực của đời sống xã hội Có thể nói các sản phẩm của công nghệ

có mặt ở khắp mọi nơi, từ công sở đến gia đính Nó xuất hiện trong nhiều lĩnh vực

từ giáo dục, y tế, đến vui play giải trì, nghiên cứu khoa học v v

Sức mạnh của các sản phẩm do công nghệ Multimedia mang lại là sự

đa dạng phong phú của các dạng thông tin Người ta có thể thu nhận, xử lý thông tin thông qua thị giác, thính giác nhờ âm thanh, hính ảnh, văn bản mà công nghệ Multimedia mang lại Điều này làm cho hiệu quả thu nhận, xử lý thông tin cao hơn so với thông tin chỉ ở dạng văn bản

Ý tưởng đặt nền móng cho lĩnh vực công nghệ này đã có từ năm

1945 Ông Vanner Brush ,giám đốc cơ quan nghiên cứu phát triển khoa học của chình phủ Mỹ lúc bấy giờ (Director ofthe office Scientific Research và Development in the US Gouverment) đã đưa ra câu hỏi là, liệu có thể chế tạo được loại thiết bị cho phép lưu trữ các dạng thông tin để thay cho sách, nói một cách khác chẳng nhẽ mọi thông tin chỉ có thể lưu trữ ở dạng sách? Nhận thức được

ý nghĩa quan trọng của loại thiết bị có tình chất trên, hàng loạt các nhà khoa học, công nghệ đã tập trung nghiên cứu Nó là cở sở hay nền tảng của công nghệ Multimedia ngày nay

Năm 1960 Ted Nelson và Vàrries Van Dam đã công bố công trính nói về kỹ thuật truy nhập dữ liệu dưới cái tên gọi Hypertext và Hypermedia Kỹ thuật này cho đến nay vẫn được giữ nguyên tên và được sử dụng rộng rãi trong dịch vụ Web trên Internet Năm 1968 nglebvà đã đưa ra được hệ thống sử dụng Hypertext trên máy tình với cái tên NLS Bộ quốc phòng Mỹ thành lập tổ chức DARPA (US deference advanced Research Prọject Agency) để nghiên cứu về công nghệ Multimedia Năm 1978 phòng thì nghiệm khổng lồ MIT Media Laboratory chuyên nghiên cứu về công nghệ Multimedia được thành lập Chỉ sau một thời gian ngắn hoạt động, nhận thức được tầm quan trọng và ý nghĩa xã hội của công nghệ Multimedia, người ta đã đầu tư gần 40 triệu USD cho phòng thí ghiệm này Một loạt các công ty, các hãng lớn đã cho ra đời các phòng thì nghiệm về Multimedia như AT & T, BELL, Olivity Những nỗ lực không ngừng của các nhà

Trang 6

khoa học,công nghệ đã cho phep người ta gặt hái được nhiều kết quả có tình chất nền móng cho lĩnh vực Multimedia

Những kết quả này đa nhanh chóng được triển khai ứng dụng trong các lĩnh vực truyền hính, viễn thông v.v

1.2 Một số khái niệm cơ bản

1.2.1 Thế nào là phương tiện

Trong suốt chiều dài lịch sử, thông tin đã được chuyển tải thông qua một phương tiện duy nhất Âm thanh, chẳng hạn như giọng nói của con người, chình là một loại phương tiện đó và qua nhiều thế kỉ trước khi chữ viết được sử dụng rộng rãi thí nói chuyện là một cách thức chủ yếu để trao đổi thông tin Sau này con người bắt đầu kể chuyện và để lại thông tin về cuộc sống của mính thông qua các hính vẽ, các bức tranh Sự ra đời của chữ viết đã cho con người một phương tiện khác nữa để diễn đạt ý nghĩ của mính Ngày nay, con người thường sử dụng lời nói, âm thanh, âm nhạc, văn bản, hính ảnh, đồ hoạ, hoạt ảnh và video để truyền tải thông tin Những thứ này là tất cả các loại phương tiện khác nhau (thuật ngữ media là số nhiều của medium) và mỗi phương tiện thường được dùng để biểu đạt các loại thông tin nhất định

Như vậy trong ý nghĩa này, phương tiện chỉ đơn giản là một cách thức để truyền đạt thông tin

1.2.2 Thế nào là đa phương tiện

Trước tiên người ta có thể hỏi đa phương tiện là gì ? Đa phương tiện là tích hợp của văn bản, âm thanh, hình ảnh của tất cả các loại và phần mềm

có điều khiển trong một môi trường thông tin số

Định nghĩa về đa phương tiện sẽ đề cập sau Dữ liệu đa phương tiện gồm dữ liệu về:

Trang 7

Đa phương tiện có nhiều loại, những phương tiện công cộng về đa phương tiện: Radio, vô tuyến, quảng cáo, phim, ảnh

Nhu cầu về tương tác người-máy luôn đặt ra trong hệ thống thông tin Vấn đề chính về tương tác người-máy không là quan hệ giữa con người với máy tính mà là con người với con người Con người có vai trò quan trọng trong

hệ thống thông tin

Định nghĩa

Định nghĩa đa phương tiện (theo nghĩa rộng) là bao gồm các phương tiện: văn bản, hình vẽ tĩnh (vẽ, chụp), hoạt hình (hình ảnh động), âm thanh

Cuối cùng người ta có thể định nghĩa đa phương tiện; đa phương tiện

là kỹ thuật mô phỏng và sử dụng đồng thời nhiều dạng phương tiện chuyển hoá thông tin và các tác phẩm từ các kỹ thuật đó

Liên quan đến định nghĩa đa phương tiện, người ta cần lưu ý những khía cạnh sau:

- Thông tin cần phải được số hoá, phù hợp với xu thế và rẻ;

- Phải dùng mạng máy tính, để đảm bảo truyền bá, hay truyền tải tốt;

- Sử dụng phần mềm có tương tác, cho phép người dùng trao đổi với phần mềm và thay đổi theo ý người dùng;

- Phải thiết kế giao diện người máy phù hợp với phát triển của đa phương tiện, tức giao diện người dùng đa phương tiện được lưu ý nhiều trong các năm gần đây

1.2.3 Thế nào là truyền thông đa phương tiện

Kể từ lâu con người đã khám phá ra rằng các thông điệp sẽ trở nên tác động hơn (có nghĩa là người nghe sẽ hiểu và nhớ chúng dễ hơn) khi chúng được biểu đạt thông qua một kết hợp của các phương tiện khác nhau Loại kết hợp này chình là ý nghĩa của thuật ngữ truyền thông đa phương tiện

Truyền thông đa phương tiện là sử dụng nhiều hơn một loại phương tiện vào cùng một thời điểm

Ví dụ:

- Giáo viên sử dụng bảng đen trong lớp học để viết các lời giải thìch cho bài giảng

của họ

Trang 8

- Sử dụng phim ảnh, truyền hính kết hợp nhiều loại phương tiện (âm thanh, video, hoạt ảnh, hính ảnh tĩnh và chữ) để tạo ra nhiều loại thông điệp khác nhau có khả năng cung cấp thông tin và sự tiêu khiển cho mọi người theo những cách thức độc nhất và đầy ý nghĩa

Thế nào là một hệ truyền thông đa phương tiện?

Các hệ thống thông tin đa phương tiện dùng nhiều phương tiện giao tiếp khác nhau (văn bản, dữ liệu ghi, dữ liệu số, đồ hoạ, hính ảnh, âm thanh, video ) Nhiều ứng dụng là đa phương tiện theo ý nghĩa là chúng dùng nhiều dạng trên Tuy nhiên, thuật ngữ “đa phương tiện” thường được dùng để mô tả các hệ thống phức tạp hơn, nhất là các hệ thống hỗ trợ hính ảnh và âm thanh Các thông tin mới chủ yếu được tạo ra bên ngoài máy tình Lời nói, nhạc, hính ảnh và phim được chuyển từ dạng Analog (tương tự) sang Digital (số) trước khi được dùng trong các ứng dụng trong máy tình Ngược lại, với văn bản, đồ hoạ và thậm chì phim hoạt hính đều được tạo trên máy tình và ví vậy nó chỉ đáp ứng những mục tiêu nhất định, không thể mở rộng ứng dụng được

Một hệ nền máy tình, mạng thông tin hay dụng cụ phần mềm là một hệ đa phương tiện nếu nó hỗ trợ ứng dụng tương tác cho ìt nhất là một trong các dạng thông tin sau, không kể văn bản và đồ hoạ: âm thanh, hính ảnh tĩnh hoặc phim video chuyển động

1.3 Hoàn cảnh sử dụng Multimedia

Trong nhiều tài liệu quảng cáo, người ta khuyếch trương vai trò của đa phương tiện Chính do vậy mà người ta có thể xem (i) đa phương tiện thuộc về nhiều lĩnh vực; (ii) hoặc ngược lại, đa phương tiện không có khía cạnh gì riêng, đáng để nghiên cứu

Tuy vậy trong nhiều năm qua, người ta không thể phủ nhận vai trò của đa phương tiện, tin tức (i) văn bản; (ii) hình ảnh; (iii) âm thanh; và (iv) hình động trong :

 Chương trình video theo yêu cầu VOD;

 Trò play điện tử, video;

 Giao dịch, thương mại điện tử;

Trang 9

Phòng học và thiế t bị về thực tại ảo

 Thư điện tử cao cấp có kèm hình ảnh và âm thanh

 Giáo dục từ xa, dạy học với trợ giúp của máy tính, dạy qua sóng của đài phát thanh hoặc trên TV, trên mạng máy tính Xu thế về học điện tử được nhiều tác giả nhắc đến

 Các hoạt động tiến đến chính quyền điện tử và làm việc tại nhà

Vậy, có thể dùng đa phương tiện trong các ứng dụng sau:

 Đào tạo trên máy CBT;

 Mô phỏng, ví dụ lái máy bay trong buồng lái mô phỏng, giải phẫu từ xa;

 Hiện thực ảo;

 Vui chơi, học sáng tạo;

 Thể hiện các đa phương tiện, chẳng hạn làm trang WEB theo đặt hàng;

 Trò play giải trí

 Giáo dục, Y tế, thương mại

Một lưu ý khi triển khai đa phương tiện là tác động của đa phương tiện, gây nên nhiều thay đổi, đặc biệt là :

- Thay đổi cấu trúc công nghiệp: Trước đây cần sản lượng công nghiệp cao, nay cần chất lượng quan trọng hơn và đồng thời quan tâm đến tính thẩm mỹ của sản phẩm

- Thay đổi cách thức liên kết trong công việc

- Thay đổi cách sống

1.4 Các chuẩn Multimedia thông dụng

Định nghĩa của ISO:

Trang 10

"Chuẩn là các thoả thuận trên văn bản chứa các đặc tả kĩ thuật hoặc các tiêu chí chính xác khác được sử dụng một cách thống nhất như các luật, các chỉ dẫn, hoặc các định nghĩa của các đặc trưng, để đảm bảo rằng các vật liệu, sản phẩm, quá trình, và dịch vụ phù hợp với mục đích của chúng"

Các chuẩn media

Các chuẩn media quy định các định dạng chuẩn của media Đa số các chuẩn

có nguồn gốc từ World Wide Web Consortium (W3C) Dưới đây là một số chuẩn media thông dụng có nguồn gốc tư W3C:

- CSS (Cascading Style Sheet):kiểm soát giao diện bên ngoài các trang HTML và

XML

- DOM (Document Object Model):lập trính các trính duyệt và các trang của

- HTML (Hypertext Markup Language):tạo các trang Web

- HTTP (Hypertext Transfer Language):gửi dữ liệu giữa server và trính duyệt

- MathML (Mathematics Markup Language):hiển thị các phương trính toán học

- PNG (Portable Network Graphics): dùng cho đồ hoạ điểm

- SMIL (Synchronized Multimedia Integration Language):tạo các bài trính bày

multimedia

- XML (eXtensible Markup Language):tạo các ngôn ngữ đánh dấu tuỳ biến được

Còn một số chuẩn media của các tổ chức khác như sau:

- GIF (Graphics Interchange Format):dùng cho đồ hoạ điểm của CompuServe

- JPEG (Joint Photographic Expert Group):dùng cho các ảnh (http://www.jpeg.com

- MPEG (Moving Picture Experts Group):phục vụ cho video

(http://mpeg.telecomitalialab.com)

- vCard dùng cho các thẻ thương mại điện tử (http://www.imc.org)

Trang 11

- MIME (Multipurpose Internet Mail Extensions) bởi Internet Engineering Task

Force xác định các định dạng file và việc gửi chúng qua các thông điệp e-mail (http://www.ietf.org)

1.5.Tổng quan về quá trình phát triển Multimedia

Lịch sử phát triển của đa phương tiện

Một số mốc thời gian cho thấy đa phương tiện được dùng như thuật ngữ chưa lâu

- Năm 1965: Trong hội thảo quốc tế về phim xuất hiện thuật ngữ đa phương tiện

- Năm 1975: Người ta gọi đa phương tiện là trò chơi, quảng cáo, video

- Năm 1985: Đã xuất hiện các ca sỹ nhạc POP dùng giàn nhạc điện

tử có hệ thống tự chỉnh âm thanh ánh sáng Từ đó người ta thấy rằng đa phương tiện là một phần đời sống thường ngày

- Năm 1995: Con người đã sống trong môi trường có đầy đủ tiện nghi

và sử dụng nhiều kết quả của đa phương tiện

Để triển khai các đề án đa phương tiện, người ta cần giải quyết một số vấn đề về nhận thức: (i) Khi dùng đa phương tiện, vì các phần mềm đa phương tiện là các phần mềm dẫn dắt người dùng nên cần có quan điểm nào đấy về sử dụng đa phương tiện;

(ii) Phần mềm đa phương tiện viết ra rất tốn kém, trong khi nhu cầu luôn luôn thay đổi vì thế cần phải có một số công cụ để sửa đổi nhanh, rẻ; (iii) Trong lĩnh vực đa phương tiện cần phải luôn sáng tạo, và đòi hỏi người lập trính đa phương tiện phải có cái nhìn tổng thể

Thông tin đa phương tiện có vai trò lớn trong xã hội tri thức, góp phần chuyển hóa sang quyền lực hay tiền bạc

Trang 12

Mối quan hệ theo A.Toffler

Tuy có một vài khó khăn, trước hết là đầu tư cho đa phương tiện, người ta vẫn khuyến cáo các cơ quan, đơn vị nên dùng đa phương tiện, nhằm (i) Để theo kịp đà phát triển của khoa học công nghệ; (ii) đa phương tiện giúp tạo ra các thông tin mới; (iii) đa phương tiện cho phép thể hiện thông tin tốt hơn, có nhiều cách thể hiện cho nhiều loại người; và (iv) Cho phép dùng hiện thực ảo

Nhìn nhận về tình hình áp dụng công nghệ đa phương tiện, người ta thấy :

- Tại nhiều nước khối Asean: có trung tâm đào tạo đa phương tiện, có các công ty chuyên về đa phương tiện Bên cạnh đài phát thanh và truyền hình, đa phương tiện trở thành nhu cầu trong đời sống kinh tế xã hội (đặc biệt trong quảng cáo sản phẩm, nghe nhìn, )

- Tại Việt Nam: nhiều cơ quan, chẳng hạn Tổng cục du lịch đã sản xuất đĩa CDROM giới thiệu về du lịch Việt Nam; các công ty liên doanh về quảng cáo văn hoá đã tạo bộ ảnh Việt Nam; hãng phim hoạt hình trung ương làm phim hoạt hình quảng cáo, làm phim cho thiếu nhi

Đa phương tiện được sử dụng nhiều trong các lĩnh vực như quảng cáo, dịch

vụ, giáo dục, y tế, ngân hàng Và điều cần thiết nhằm phát triển đa phương tiện là giáo dục để mọi người nhận thức về đa phương tiện, có khả năng tổ chức các nhóm công tác về đa phương tiện

1.6 Ứng dụng đa phương tiện

1.6.1 Giáo dục

- Elearning

- Bài giảng điện tử

Trang 13

họ cung cấp thông tin trực tuyến về các sản phẩm đang có và các thông tin thương mại khác

1.6.3 Hội thảo trực tuyến

Trang 14

trợ tương tác như vậy của người sử dụng thí phải có khả năng tím kiếm hiệu quả những bộ phim thoả mãn nhu cầu của người sử dụng Hơn thế nữa, người sử dụng nên có được khả năng xem trước những mẩu phim giới thiệu mà họ mong muốn Ngoài ra, họ nên được quyền xem xét các bài phê bính về bộ phim, với sự cân nhắc như vậy có thể giúp người sử dụng lựa chọn được những bộ phim mà anh ta thực sự muốn xem

Ngoài ra nhiều kỹ xảo trong điện ảnh là nhờ sự góp mặt đáng kể của các phần mềm multimedia

Game, các trò play giải trí trên máy tính và trên các thiết bị di động ngày càng phát triển

1.6.5 Công nghiệp du lịch

Rất nhiều người lập kế hoạch nghỉ hè cho gia đính hàng năm phải đến các đại

lý du lịch hay trong sách quảng cáo du lịch để tím ra địa điểm du lịch phù hợp tài chính và thoả mãn nhu cầu nghỉ ngơi của họ Nhưng ta có thể lập kế hoạch toàn bộ chuyến du lịch tại nhà Hệ thống đa phương tiện cài đặt đại lý du lịch thông minh cho người sử dụng khả năng khớp nối các nhu cầu du lịch của họ, sau

đó hỏi hệthống để tìm ra vị trí thoả mãn Hệ thống có thể cho lại nhiều điểm đến đều thoả mãn yêu cầu người sử dụng Hệ thống sẽ in ra toàn bộ hành trình, chi tiết

về khách sạn, lịch bay

1.6.6 Điều tra tội phạm

- Hãy xem xét một cuộc điều tra với quy mô lớn của cảnh sát về tính hính buôn bán ma túy Thông thường, để thực hiện thành công một cuộc điều tra như vậy lực lượng cảnh sát sử dụng một số lượng lớn các thiết bị điện tử để thực hiện theo dõi các đối tượng nghi ngờ dình lìu đến các tổ chức ma tuý Với một cuộc điều tra như vậy có thể sử dụng các thiết bị dưới đây để thu thập thông tin:

- Cảnh sát có thể sử dụng camera theo dõi (surveillance camera) để ghi lại các hính ảnh về hoạt động đang diễn ra tại các địa điểm khác nhau Vì dụ mỗi camera theo dõi có thể giám sát các hoạt động đang diễn ra tại một địa điểm trong một khoảng thời gian tương đối dài (có thể là trong 6 tháng) Tại mỗi địa điểm họ thu được khoảng vài triệu hính ảnh Ví chỉ mỗi một cuộc điều tra như vậy đã đòi hỏi

từ 50 đến 100 camera theo dõi đặt tại các địa điểm khác nhau, do đó số hính ảnh video cần được quản lý là nhiều đáng kể Quan trọng hơn nữa là với thúc ép của pháp luật, cần thực hiện hàng trăm cuộc điều tra như vậy tại những địa điểm xác định trong một khoảng thời điểm tại nhiều vùng khác nhau với rất nhiều hính thức tội phạm tương tự như cuộc điều tra về ma tuy như điều tra về các đường dây lừa

Trang 15

đảo, các tội phạm liên quan đến tài chình, các cuộc điều tra về khủng bố, các cuộc điều tra về gián điệp… Số lượng dữ liệu video thu được theo cách đó phục vụ cho các cuộc điều tra là lớn khủng khiếp

Một tính huống khác, lực lượng cảnh sát được lệnh thực hiện các cuộc nghe trộm điện thoại (telephone wiretaps) tại một địa điểm sau đó tập hợp lại các dữ liệu

âm thanh là các cuộc đàm thoại cho là đáng ngờ Mặc dù số lượng các cú điện thoại

có thể khác nhau giữa các tội phạm, nhưng các tổ chức tội phạm (như đường dây

ma tuy) rất hay sử dụng liên lạc điện thoại Theo chiều hướng đó số lượng các chuỗi

âm thanh thu được trong một khoảng thời gian từ các cuộc điều tra là rất lớn Do vậy việc tổ chức và tím kiếm dữ liệu audio này có ý nghĩa vô cùng lớn

- Ngoài tất cả những gí trính bày ở trên, lực lượng cảnh sát có thể có một số lượng lớn các bức ảnh chụp (still photographs) từ các điều tra viên (có thể trong quá trính theo dõi một kẻ tính nghi) Hơn nữa, trong các cuộc điều tra tội phạm quy mô lớn có thể phát hiện ra số lượng đáng kể các tội phạm với tội danh nhẹ (vì dụ hính ảnh những kẻ buôn bán ma tuý lẻ bị chụp khi đang tiến hành bán ma tuý hay một hành vi liên quan đến ma tuý có thể được phát hiện mà bản thân nó có liên quan đến người trong bức ảnh) Tất cả những hính ảnh này phải được lưu lại dưới dạng kỹ thuật số, sẵn sàng cho các công việc tím kiếm và khai thác khi cần

- Cảnh sát cũng có thể phải xem xét một số lượng lớn các tư liệu (document)

đã tím được tại những nơi có liên quan đến những vụ án đang điều tra hay những vụ

án khác Một lượng lớn tư liệu có thể liên quan trực tiếp đến vụ án nhưng vào thời điểm ban đầu thí chúng có thể không được rõ ràng Khi một cuộc điều tra về ma tuý đang diễn ra, mọi cái trở nên minh bạch khi mà ngày càng có nhiều mối liên hệ với các chứng cứ đã thu được trong cuộc điều tra này hay các cuộc điều tra trước đây cũng có thể là những cuộc điều tra đang diễn ra cùng thời điểm

- Một tính huống khác, cảnh sát có thể xâm nhập đến các dữ liệu có quan hệ cấu trúc (structured relational data) Dữ liệu dạng này có thể bao gồm, thì dụ như

dữ liệu trong các giao dịch ngân hàng của một vài tội phạm Điều này là đặc biệt quan trọng bởi ví một số trùm ma tuý sử dụng rất nhiều hính thức rửa tiền, việc “ Lần theo dấu vết đồng tiền” thường khám phá được rất nhiều điều thú vị Các

dữ liệu khác thuộc thể loại này có thể bao gồm những thông tin chán ngắt như những cuốn danh bạ điện thoại để xác định, nhận dạng người bị tính nghi

Cảnh sát cũng có thể sử dụng hệ thống thông tin địa lý (GIS) chứa đựng những

dữ liệu địa lý liên quan đến cuộc điều tra ma tuý đang được triển khai Vì dụ cảnh

Trang 16

sát nghi ngờ rằng một tuyến đường nào đấy đang được sử dụng để vận chuyển ma tuý

Để kiểm tra giả thuyết trên, họ phong toả một trong những tuyến đường đó (có

lẽ ban đầu là kiểm tra một cách khắt khe trên tuyến đường này), theo cách đó làm tập trung hướng vận chuyển ma tuý Mẫu (pattern) của luồng ma tuý sẽ cung cấp cho cảnh sát các thông tin rất quan trọng về các vị trì đầu mối của ma tuý Để thực thi chiến dịch trên, cảnh sát có thể sử dụng các hệ thống GIS để quản lý dữ liệu địa

Các hệ thống GIS này quản lý các thông thông tin bao gồm thông tin về bản

đồ đường đi, cũng có thể là các thông tin thu được về địa hính của những vùng lân cận của những thủ phủ trên núi (như Medellin, Colombia) Nhận thức về địa hính cũng như các hính thức sử dụng các phương tiện để vận chuyển ma tuý có thể mang lại cho cảnh sát những đầu mối có giá trị để xác định được các tuyến đường đi qua các địa hính có khả năng là vùng hoạt động của tội phạm

Trang 18

Để khai báo 1 layout ta sẽ thực hiện 1 trong 2 cách dưới đây:

- Khai báo các phần tử UI trong XML: Android cung cấp một vốn từ vựng XML đơn giản tương ứng với các lớp View và các lớp con của nó

- Khởi tạo Layout khi thực thi chương trình: Ta có thể tạo ra các đối tượng View và ViewGroup (và thao tác các thuộc tính của chúng) trong ứng dụng của chúng ta khi lập trình

2.2.1 Thiết kế Layout bằng XML

Sử dụng các từ vựng XML, ta có thể thiết kế nhanh các layout UI và các phần

tử màn hình trên layout đó Mỗi một file layout phải chứa duy nhất một phần tử gốc, phần tử này phải là một đối tượng View hoặc ViewGroup Sau khi ta xác định

Trang 19

được phần tử gốc, ta có thể bổ sung thêm các đối tượng khác như các yếu tố con để từng bước xây dựng một hệ thống phân cấp

Ví dụ, cách bố trí XML có sử dụng một LinearLayout dọc để chứa một TextView và một Button

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

2.2.2 Hiển thị Layout từ file XML

Khi biên dịch ứng dụng, mỗi file layout XML được biên soạn thành một tài nguyên View Ta tải các tài nguyên layout từ mã nguồn của ứng dụng trong việc

setContentView(R.layout.layout_file_name)

2.2.3 Một số thuộc tính của các đối tượng trong layout

- ID: Một đối tượng View bất kỳ sẽ có một số nguyên được gắn với nó, để

phân biệt các View trong cây Khi ứng dụng được biên dịch, ID này được tham chiếu như một số nguyên, nhưng ID được gắn trong file layout XML như một chuỗi trong thuộc tính ID Đây là một thuộc tính phổ biến cho tất cả các đối tượng View

Cú pháp cho một ID bên trong một thẻ XML là:

android:id="@+id/my_button"

Ký hiệu @ tại vị trí bắt đầu của chuỗi chỉ ra rằng bộ phân tích cú pháp XML nên phân tích và mở rộng phần còn lại của chuỗi ID và xác định nó như là một nguồn tài nguyên ID Biểu tượng (+) có nghĩa rằng đây là một tên tài nguyên mới phải được tạo ra và thêm vào các nguồn tài nguyên (trong file R.java)

Trang 20

Để tạo view và tham chiếu nó trong ứng dụng, ta có thể thực hiện theo các bước sau đây:

Bước 1: Định nghĩa 1 view/widget trong file layout và gắn cho nó 1 ID duy

Bước 2: Tạo một thể hiện của các đối tượng view và nắm bắt nó từ layout

trong phương thức onCreate()

Button myButton = (Button) findViewById(R.id.my_button);

Layout Position

Hình dạng của 1 view là một hình chữ nhật Một view có 1 vị trí được biểu diễn như một cặp tọa độ left và top, và hai kích thước thể hiện là width và height Các đơn vị cho vị trí và kích thước là pixel

- Relative Layout: Cho phép bạn xác định mối tương quan vị trí của các đối tượng con với nhau (đối tượng A để bên trái đối tượng B) hoặc với cha của nó (đặt

ở top của đối tượng cha)

Building layouts với một Adapter

Khi nội dung cho Layout của chúng ta là động hoặc không xác định trước, ta

có thể sử dụng một layout là lớp con AdapterView để bố trí các view khi thực thi chương trình Một lớp con của AdapterView sử dụng một Adapter để kết nối dữ liệu với các layout của nó Adapter cư xử như một người trung gian giữa nguồn dữ liệu

và AdapterView layout - Adapter nhận dữ liệu từ một nguồn (mảng hoặc một truy vấn cơ sở dữ liệu) và chuyển đổi từng mục thành một view sao cho nó có thể được thêm vào AdapterView layout

Một số layout phổ biến được hỗ trợ bởi một adapter bao gồm:

Trang 21

List View: Hiển thị danh sách cột đơn cuộn

Grid View: Hiển thị một lưới di chuyển các cột và các hàng

Xử lý sự kiện click

Ta có thể đáp trả sự kiện click trên mỗi phần tử trong AdapterView bằng cách thực thi giao diện AdapterView.OnItemClickListener

Ví dụ:

// Create a message hvàling object as an anonymous class

private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {

public void onItemClick(AdapterView parent, View v, int position, long id) { // Do something in response to the click

} };

listView.setOnItemClickListener(mMessageClickedHandler);

2.3 Canvas Drawing

Lớp Canvas thuộc gói java.lang.Objects

Lớp Canvas chứa các phương thức draws Để vẽ một cái gì đó, ta cần 4 thành phần cơ bản: Một Bitmap để giữ các pixel, một Canvas để gọi draw, một bản vẽ nguyên thủy, và một paint (để mô tả màu sắc, kiểu dáng của bức vẽ)

Android framework APIs cung cấp một tập các API 2D cho phép bạn render

đồ họa tùy biến trên một Canvas hoặc sửa đổi các View đang tồn tại theo cảm nhận của họ Khi vẽ đồ họa 2D, thông thường ta sẽ thực hiện theo 1 trong 2 cách dưới đây:

-Cách 1: Vẽ đồ họa hoặc hình ảnh động vào một đối tượng view từ layout

Theo cách này, vẽ các đồ họa của chúng ta được xử lý bằng hệ thống view bình thường có xử lý vẽ, ta xác định các đồ họa đi vào bên trong view

- Cách 2: Vẽ trực tiếp đồ họa trên một canvas, bằng cách gọi phương thức

onDraw() thông qua đối tượng Canvas, hoặc một trong các phương thức draw () (ví dụ như drawPicture()) Tương tự như vậy ta cũng có thể điều khiển bất kỳ hình ảnh động nào

Cách 1 vẽ 1 View, là lựa chọn tốt nhất khi chúng ta muốn vẽ đồ học đơn giản

mà không cần phải thay đổi tự động và không phải là một phần của game Ví dụ khi

ta muốn vẽ đồ họa vào trong một View khi ta muốn hiển thị một đồ họa tĩnh hoặc một hình ảnh động đã dược tạo trước đó bên trong một ứng dụng tĩnh khác

Trang 22

Cách 2: Vẽ một Canvas là tốt hơn khi ứng dụng của chúng ta cần thường

xuyên vẽ lại Các ứng dụng như video game cần được vẽ trên Canvas

Trong cùng thread như UI Activity, ta thiết lập sự tùy chỉnh thành phần View trong layout của chúng ta, gọi phương thức invalidate(), sau đó gọi lại phương thức onDraw()

Hoặc trong một thread riêng biệt, ta quản lý một SurfaceView và thực hiện vẽ tới Canvas

Một số phương thức trong lớp Canvas

vào đó ta gọi phương thức SetBitmap()

Canvas(Bitmap bt): Tạo một khung với một bitmap được chỉ định để

vẽ Bitmap có thể thay đổi cho Canvas vẽ vào Mật

độ khởi tạo của Canvas là mật độ của bitmap

void drawArc (float left,

Nếu sweepAngle >=360 thì toàn bộ hình oval sẽ được vẽ Nếu sweepAngle <0 thì sweepAngle được tính bằng công thức sweepAngle = sweepAngle %

360

Cung được vẽ theo chiều kim đồng hồ, một góc 00tương ứng với góc hình học của 0 độ (03:00 trên một chiếc đồng hồ)

Các tham số:

StartAngle: Góc bắt đầu vẽ cung sweepAngle: Góc sweep (độ) được đo theo chiều kim đồng hồ

wedge useCenter = true thì bao gồm cả tâm của hình oval trong cung

void drawArc (RectF oval,

Trang 23

Vẽ một chuỗi các đường thẳng, mỗi đường sẽ được

vẽ lên từ 4 giá trị liên tục; bởi vậy để vẽ được một đường thẳng thìmảng phải có ít nhất 4 giá trị Về măt logic phương thức này tương đương với việc ta

vẽ lần lượt các đường thẳng như sau:

drawLine(pts[0], pts[1], pts[2], pts[3]) sau đó drawLine(pts[4], pts[5], pts[6], pts[7]) ,

offset: là số giá trị của mảng bị bỏ qua trước khi vẽ count: Số giá trị của mảng được xử lý sau khi đã bỏ qua offset giá trị đầu tiên

void drawOval (float left,

float top,

float right,

float bottom,

Paint paint)

Vẽ hình oval trên paint

void drawRect (float left,

void drawText (String text,

Trang 24

Ví dụ: để vẽ chuỗi "My Text" trên paint ta thực hiện đoạn code sau:

Paint paint = new Paint();

Bước 1: Tạo Project có tên: ExampleCanvas

Bước 2: Tạo layout main của ứng dụng

Chúng ta sẽ tạo một layout xml cho AndroidCanvasExample.class chỉ bao gồm một FrameLaout chứa CanvasView

Mở file res/layout/activity_main.xml và soạn thảo:

Trang 25

import android.os.Bundle;

import android.view.View;

public class AndroidCanvasExample extends Activity {

private CanvasView customCanvas;

Bước 4: Viết mã nguồn cho file CanvasView

Open src/com.javacodegeeks.androidcanvasexample/CanvasView.java và soạn thảo package com.javacodegeeks.androidcanvasexample;

public class CanvasView extends View {

public int width;

public int height;

private Bitmap mBitmap;

private Canvas mCanvas;

private Path mPath;

Context context;

private Paint mPaint;

private float mX, mY;

private static final float TOLERANCE = 5;

public CanvasView(Context c, AttributeSet attrs) {

super(c, attrs);

context = c;

Trang 26

// we set a new Path mPath = new Path();

// và we set a new Paint with the desired attributes mPaint = new Paint();

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

// your Canvas will draw onto the defined Bitmap mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); mCanvas = new Canvas(mBitmap);

// when ACTION_DOWN start touch according to the x,y values

private void startTouch(float x, float y) {

mPath.moveTo(x, y);

mX = x;

mY = y;

}

// when ACTION_MOVE move touch according to the x,y values

private void moveTouch(float x, float y) {

public void clearCanvas() {

mPath.reset();

invalidate();

Trang 27

}

// when ACTION_UP stop touch

private void upTouch() {

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);

mCanvas = new Canvas(mBitmap);

Trang 28

Chúng ta chuyển các tọa độ x,y event thành đường di chuyển

private void moveTouch(float x, float y) {

Trang 29

Tất cả Drawable được lưu trong các file riêng biệt thuộc thư mục res/drawable Ngoài các tệp tin đồ họa, Android hỗ trợ XML drawables, 9-patch graphic XML drawable được sử dụng để mô tả các shape (color, border, gradient), state, transitions,

nine-patch graphic được sử dụng để định nghĩa phần đồ họa kéo dài nếu view

sử dụng đồ họa này lớn hơn graphic

Drawable cũng có thể được viết trong code java Mọi đối tượng được kế thừa (implement) Drawable có thể được sử dụng như một Drawable trong code

2.4.2 Sử dụng drawables cho views

Drawable được tham chiếu trong XML thông qua @drawable/filename; trong

đó filename là tên file không có phần mở rộng Ví dụ đoạn mã sau đây truy cập đến file res/drawable/hello.png bằng cú pháp @drawable/hello

Trang 30

Ta cũng có thể gán drawable cho views trong code Hầu hết views chấp nhận

ID như một parameter Ví dụ đoạn code sau đây minh họa cách thiết lập một drawable như background cho một ImageView

ImageView imageView = (ImageView) findViewById(R.id.image);

imageView.setImageResource(R.drawable.hello);

2.4.3 Loading Bitmaps và Drawables

Android cho phép chúng ta sử dụng lớp Bitmap để làm việc với bitmaps Phần này giải thích làm thế nào để tạo các đối tượng Bitmap thông qua mã Java và làm thế nào để chuyển đổi Bitmap thành các đối tượng Drawable và ngược lại

nếu cần ta có thể load bất kỳ file bitmap nào trong code của chúng ta và chuyển chúng thành đối tượng Drawable Ví dụ sau đây minh họa các bước làm thế nào để tạo ra một đối tượng Bitmap cho thư mục assets và gán nó vào một ImageView

AssetManager manager = getAssets();

// read a Bitmap from Assets

InputStream open = null;

try {

open = manager.open("logo.png");

Bitmap bitmap = BitmapFactory.decodeStream(open);

// Assign the bitmap to an ImageView in this layout

ImageView view = (ImageView) findViewById(R.id.imageView1);

Trang 31

Ta cũng có thể truy cập Drawables từ thư mục res/drawable như các đối tượng

Bitmap trong mã nguồn của chúng ta như ví dụ sau:

Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_search);

Ta cũng có thể tạo một scale bitmap trên cơ sở weight và height mới

Bitmap originalBitmap = <initial setup>;

Bitmap resizedBitmap = Bitmap.createScaledBitmap(originalBitmap, newWidth, newHeight, false);

Để chuyển một đối tượng Bitmap thành một Drawable Drawable ta sử dụng dòng code sau đây:

# Convert Bitmap to Drawable

Drawable d = new BitmapDrawable(getResources(),bitmap);

2.4.4 XML Drawables

2.4.4.1 Shape Drawables

Shape Drawables là file XML cho phép chúng ta định nghĩa một đối tượng hình học với các thuộc tính colors, borders và gradients có thể được gán cho Views Lợi ích của việc sử dụng XML Shape Drawables là nó tự động điều chỉnh về kích thước đúng

Ví dụ sau định nghĩa Shape Drawable:

Trang 33

final ImageView image = (ImageView) findViewById(R.id.image);

final ToggleButton button = (ToggleButton) findViewById(R.id.button);

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(final View v) {

TransitionDrawable drawable = (TransitionDrawable) image.getDrawable();

vector drawable trong file vectordrawable.xml

<animation-list android:id="@+id/selected" android:oneshot="false">

<item android:drawable="@drawable/phase1" android:duration="400" />

<item android:drawable="@drawable/phase2" android:duration="400" />

<item android:drawable="@drawable/phase3" android:duration="400" />

</animation-list>

ImageView img = (ImageView)findViewById(R.id.yourid);

img.setBackgroundResource(R.drawable.your_animation_file);

// Get the AnimationDrawable object

AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();

// Start the animation (looped playback by default)

frameAnimation.start();

Trang 34

Bạn cũng có thể thực hiện điều này bằng cách xây dựng một lớp extends Drawable và implements Animatable

2.5 Bài tập: Create Custom Drawables

Tạo Drawing Shape

Shape Drawable là một file XML định nghĩa một hình dạng hình học, bao gồm color và gradients Nó được sử dụng để tạo ra một hình dạng phức tạp mà sau

đó có thể được gắn như background của một layout hay một view trên màn hình Ví

dụ, ta có thể sử dụng một shape drawable để thay đổi shape, gradient của một button background

Một shape là một tập hợp các thuộc tính được kết hợp để mô tả một nền Các shape có thể được mô tả với những thuộc tính như corners để làm tròn, gradient cho hình nền, padding cho khảng cách, solid cho màu nền và stroke cho border

Solid Color Shape

Đây là một ví dụ về cách vẽ một hình chữ nhật tròn với viền trong file res/layout/drawable/solid_color_shape.xml

android:layout_height="wrap_content"

android:background="@drawable/solid_color_shape"

Trang 35

android:textColor="#ffffff"

android:text="@string/hello_world" />

và kết quả ta thu được

Chú ý rằng drawable có thể được ứng dụng với một view bất kỳ và thường được thiết lập với thuộc tính background

Gradient Colored Shapes

Shape cũng hỗ trợ gradients backgrounds như các đặc tính như startColor, centerColor, endColor, angle Gradients khác nhau như radial (đường tròn), linear (đường thẳng) or sweep (quét) có thể được lựa chọn nhờ sử dụng thuộc tính type

android:angle="90"/>

<padding android:left="8dp" android:top="2dp"

android:right="8dp" android:bottom="2dp" />

</shape>

Áp dụng cho một button và kết quả thu được

Ví dụ thiết lập radial-type gradients:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"

Trang 36

android:shape="rectangle" >

<corners android:radius="4dp" />

<stroke android:width="4dp" android:color="#CCFFFF" />

<gradient android:startColor="#0078a5"

và áp dụng cho textview, ta được kết quả

sử dụng solid_color_shapes và gradient chúng ta có thể tùy biến sự xuất hiện của buttons, layouts và các views khác mà không cần phải sử dụng một ảnh bất kỳ

State List

Một StateListDrawable là một đối tượng drawable được định nghĩa trong XML có sử dụng một hình ảnh khác nhau để đại diện cho một hình ảnh giống nó, tùy thuộc vào trạng thái của đối tượng Ví dụ một button widget có thể tồn tại trong một vài trạng thái khác nhau (passed, focused, or trạng thái khác), sử dụng statelistdrawable ta có thể cung caaos một ảnh nền khác nhau cho mỗi trạng thái Danh sách trạng thái hỗ trợ view states khác nhau như: android:state_pressed, android:state_focused, android:state_enabled, android:state_selected

Ví dụ ta có thể xây dựng file selector_button_bg.xml chứa một list state cho button background như sau:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true"

Trang 37

android:state_enabled="true"

android:drawable="@drawable/button_pressed" />

<item android:state_focused="true"

android:state_enabled="true"

android:drawable="@drawable/button_focused" />

<item android:state_enabled="true"

android:drawable="@drawable/button_enabled" />

</selector>

Bây giờ khi view (hoặc button, ) được nhấn hay focused, drawable được sử dụng cho view sẽ thay đổi một cách tương ứng Color_state_selector cho phép một color được chọn dựa trên view state như trong file res/color/button_text.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true" android:color="#ffff0000"/>

<item android:state_focused="true" android:color="#ff0000ff"/>

Tạo drawable để tùy chỉnh một Button

Các bước thực hiện thiết kế một button:

Bước 1: Tạo shape drawable thể hiện màu nền mặc định của Button, tạo file

res/drawable/nice_button_enabled.xml:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient

Trang 38

Bước 2: Tạo Style định nghĩa màu nền cho button trong fileres/values/styles.xml:

<style name="NiceButton" parent="@android:style/Widget.Button">

Và khi chạy chương trình ta thu được Button có dạng như sau:

Bước 4: Tạo State List drawable để biểu diễn, mô tả các trạng thái của button trong

file res/drawable/states_nice_button.xml:

Trang 39

Theo thiết kế này thì các trạng thái pressed và focused sẽ xuất hiện giống nhau

Bước 5: Thay đổi style của button trong file res/drawable/states_nice_button.xml:

<style name="NiceButton" parent="@android:style/Widget.Button">

<item name="android:gravity">center_vertical|center_horizontal</item>

Trang 40

Thiết kế giao diện tùy biến cho ListView

Các bước thực hiện thiết kế cách hiển thị items trong ListView tùy biến

Bước 1: Tạo Layout cho item của ListView trong file: res/layout/item_simple.xml:

Bước 3: Populate the ListView với các items:

ArrayList<String> items = new ArrayList<String>();

for (int i = 1; i < 8; i++) {

Ngày đăng: 24/10/2017, 15:51

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w