Â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 1MỤ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 23.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 3Bà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 414.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 5Bà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 6khoa 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 9Phò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
nó
- 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 12Mố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 13họ 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 14trợ 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 16sá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
lý
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 21List 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 22Cá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 23Vẽ 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 24Ví 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 25import 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 28Chú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 29Tấ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 30Ta 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 31Ta 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 33final 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 34Bạ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 35android: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 36android: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 37android: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 38Bướ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 39Theo 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 40Thiế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++) {