1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề tài: Xây dựng ứng dụng 3D với Android docx

139 1,4K 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 139
Dung lượng 2,09 MB

Nội dung

Tuy còn nhiều hạnchế trong phần cứng của điện thoại di động nhưng nó đã thể hiện được sức mạnh củamình trong rất nhiều các lĩnh vực khác nhau như giải trí, các tiện ích, thanh toán điệnt

Trang 1

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

Ngày Tháng Năm

Giảng Viên Hướng Dẫn

(Ký và ghi rõ họ tên)

Trang 2

NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN

Ngày Tháng Năm

Giảng Viên Phản Biện

(Ký và ghi rõ họ tên)

Trang 3

LỜI CẢM ƠN

Chúng em xin chân thành cảm ơn các thầy cô trong khoa Công Nghệ Thông Tincùng toàn thể các thầy cô trường Đại Học Sư Phạm Kỹ Thuật Tp.HCM đã truyền đạtcho chúng em những kiến thức quý giá trong suốt những năm học vừa qua

Chúng em xin chân thành cảm ơn Thầy Nguyễn Minh Đạo đã tận tình hướng dẫn,chỉ bảo chúng em trong suốt quá trình thực hiện đề tài

Cuối cùng tôi xin cảm ơn các bạn trong khoa Công Nghệ Thông Tin, những người

đã giúp đỡ, chia sẽ kiến thức, tài liệu trong suốt quá trình thực hiện nghiên cứu đề tài.Trong phạm vi khả năng cho phép, chúng em đã rất cố gắng để hoàn thành đề tàimột cách tốt nhất Song, chắc chắn sẽ không tránh khỏi những thiếu sót Chúng emkính mong nhận được sự cảm thông và những ý kiến đóng góp của quý thầy cô và cácbạn

Nhóm sinh viên thực hiện Nguyễn Chí Tâm

Nguyễn Phi Cường

MỤC LỤC

Trang 4

Mở đầu 10

PHẦN A: XÂY DỰNG ỨNG DỤNG 3D VỚI ANDROID 12 Chương 1: Tổng quan về ứng dụng trên android _12 1.1 Lược sử về Android: 12

1.2 Nền tảng Android: 13

1.3 Kiến trúc ứng dụng Android: 15

1.3.1 Máy ảo Dalvik: 15

1.3.2 Các thành phần của một ứng dụng Android: 16

1.4 Vòng đời của ứng dụng Android: 17

1.5 Các công cụ để tạo một ứng dụng Android: 18

1.5.1 Eclipse IDE: 18

1.5.2 Android SDK: 18

1.5.3 Cài đặt công cụ: 19

1.6 Thiết bị Android ảo (Android Virtual Device - AVD): 20

1.7 Android project: 22

1.7.1 Tạo một Android project mới: 22

1.7.2 Cấu trúc một project: 24

Chương 2: Các thành phần cơ bản của một ứng dụng trên Android _25 2.1 Hoạt động(Activity): 25

2.1.1 Tạo một Activity: 25

2.1.2 Vòng đời của Activity: 27

2.1.3 Khởi động một Activity: 28

2.1.4 Liên lạc giữa 2 activity: 29

Trang 5

2.2 Trình thu phát (BroadcastReceiver): 30

2.2.1 Chu kỳ sống: 30

2.2.2 Một số broadcast thông dụng: 30

2.2.3 Hàm onReceive(): 31

2.3 Dịch vụ (Service): 31

2.3.1 Tạo ra một Service: 32

2.3.2 Vòng đời của Services: 33

2.3.3 Kết nối dịch vụ: 34

2.4 Trình cung cấp nội dung (Content Providers): 38

2.4.1 Giới thiệu: 38

2.4.2 Tạo một Content Provider mới: 38

2.4.3 Truy vấn, thêm, cập nhật và xóa nội dung trong Content Provide: 43

2.4.4 Native Android Content Provider: 47

Chương 3: Thiết kế giao diện 50 3.1 Một số lớp hỗ trợ thiết kế giao diện cho ứng dụng Android: 50

3.2 Android Widget Toolbox: 50

3.3 Các kiểu Layout: 51

3.4 Tạo các View: 54

3.4.1 Chỉnh sửa các View có sẵn: 54

3.4.2 Tạo các điều khiển ghép (compound control): 55

3.4.3 Tạo các Control tùy chỉnh: 57

3.5 Tạo giao diện Activity với các View: 58

3.6 Menu: 59

3.6.1 Menu trong Android: 59

3.6.2 Các kiểu Menu Item 61

Trang 6

3.6.3 Tạo một Menu: 62

Chương 4: Xử lý bất đồng bộ _64 4.1 Thread: 64

4.2 Handler: 65

4.3 AlarmManager (báo hiệu): 67

4.4 Notification (thông báo): 68

Chương 5: Áp dụng OpenGL ES để tạo ứng dụng 3D trên Androi 71 5.1 Giới thiệu về OpenGL ES: 71

5.3 Phép chiếu trực giao (Orthographic Projection): 72

5.4 Phép chiếu phối cảnh (Perspective Projection ): 76

5.5 Phép biến đổi (Transformations): 81

Hình 19 – Kết quả phép biến đổi 85

5.6 Chiều sâu (Depth): 85

5.7 Màu sắc và tô bóng (Color and Shading): 88

5.8 Hình khối (Solid Shapes): 90

5.9 Bộ lọc mặt sau (Backface Culling): 93

5.10 Ánh sáng (Lighting): 93

5.11 Định hướng ánh sáng (Directional Lighting): 98

5.12 Dán chất liệu (Texture Mapping): 102

5.13 Hàm chất liệu (Texture Functions): 109

5.14 Pha trộn màu (Blending): 114

Trang 7

5.15 Minh bạch đối tượng (Transparency): 121

PHẦN B: CHƯƠNG TRÌNH DEMO 127 Chương 6: Demo kỹ thuật vẽ hình 3D trên Android 127 6.1 Giới thiệu chương trình: 127

6.2 Các chức năng: 127

6.2.1 Menu: 127

6.2.2 Hình ảnh một số chức năng trong chương trình: 133

PHẦN C: KẾT LUẬN 138 PHỤ LỤC 139 TÀI LIỆU THAM KHẢO _140

DANH MỤC HÌN

Trang 8

Hình 1 – Cấu trúc Android _15Hình 2 – Máy ảo Dalvik _16Hình 3 – Tạo một AVD _21Hình 4 – Trình mô phỏng thiết bị Android. 22Hình 5 – Tạo một Android project _23Hình 6 – Vòng đời của Activity _27Hình 7 – Vòng đời của service 33Hình 8 – Hoạt động kết nối dịch vụ 36Hình 9 - Quan hệ giữa các thành phần trên 49Hình 10 - Hệ thống các view với các thông số layout được kết nối với mỗi view _51Hình 11 – Icon menu _58Hình 12 – Expanded menu _59Hình 13 - Submenu _59Hình 14 - Phép chiếu trực giao _72Hình 15 – Kết quả phép chiếu trực giao _75Hình 16 - Phép chiếu phối cảnh _76Hình 17 – Mô tả góc nhìn của camera 78Hình 18 – Kết quả phép chiếu phối cảnh 79Hình 19 – Kết quả phép biến đổi 84Hình 20 – Kết quả chiều sâu 87Hình 21 – Kết quả màu sắc và tô bóng 89Hình 22 – Kết quả hình khối 92Hình 23 – Kết quả ánh sáng 97Hình 24 – Kết quả định hướng ánh sáng _101Hình 25 – Kết quả dán chất liệu 113Hình 26 – Pha màu (GL_ONE, GL_ZERO) 117

Trang 9

Hình 27 – Pha màu (GL_ONE, GL_ONE) 118Hình 28 – Pha màu (GL_ONE, GL_ONE_MINUS_DST_ALPHA) 119Hình 29 – Pha màu (GL_SRC_ALPHA, GL_ONE) 119Hình 30 – Pha màu (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 120Hình 31 – Hiệu ứng sương mù _125Hình 32 - Menu chính 130Hình 33 - Menu More 130Hình 34 - Menu vẽ hình 131Hình 35 - Menu pha màu _131Hình 36 - Menu phép biến đổi _132Hình 37 - Menu phép chiếu _132Hình 38 – Kết hợp các phép biến đổi 133Hình 39 – Demo chiều sâu 133Hình 40 –Demo vẽ mặt trụ 134Hình 41 – Demo vẽ mặt nón _134Hình 41 – Demo vẽ mặt nón cụt 135Hình 42 – Demo vẽ mặt cầu _135Hình 43 – Mô phỏng đường hầm 3D 136

Mở đầu

Trang 10

Hiện nay ngành công nghiệp phần mềm đang rất phát triển và ngành công nghiệpphần mềm trên điện thoại di động cũng không nằm ngoài xu thế đó Tuy còn nhiều hạnchế trong phần cứng của điện thoại di động nhưng nó đã thể hiện được sức mạnh củamình trong rất nhiều các lĩnh vực khác nhau như giải trí, các tiện ích, thanh toán điện

tử v.v… Ngành công nghệ phần mềm di động vẫn còn khá non trẻ ở Việt Nam vì vậyviệc nghiên cứu và phát triển các ứng dụng trên di động là rất cần thiết

Các hệ điều hành như Window Mobile, Symbian… phần nào cũng gây ít nhiềukhó khăn cho những ai có ý định xây dựng các ứng dụng trên nó Đối với WindowMobile là một công nghệ của Microsoft và hoàn toàn đóng đối với người dùng, nhàphát triển ứng dụng chỉ dựa hoàn toàn vào công nghệ mà Microsoft cung cấp, cònSymbian thì việc cấu hình để có thể lập trình trên nó cũng vô vàn khó khăn, đặc biệt là

nó sử dụng ngôn ngữ C/C++ để làm nền tảng lập trình rõ ràng là không thuận tiệntrong việc phát triển ứng dụng

Xuất phát từ nhu cầu thực tế đó, Google đã mạnh dạn nghiên cứu và đưa ra mộtnền tảng hệ điều hành mới, đó chính là Android Một nền tảng hệ điều hành mã nguồn

mở hoàn toàn và dựa vào một ngôn ngữ lập trình rất mạnh là Java để phát triển ứngdụng Chính vì Android hỗ trợ Java ngay từ trong nền tảng của nó, nên việc viết ứngdụng, ngay cả sử dụng các chức năng của phần cứng là hoàn toàn dễ dàng thông quaviệc sử dụng bộ công cụ hỗ trợ lập trình được cung cấp hoàn toàn miễn phí, là AndroidSDK

Nhóm thực hiện nhận thấy nhu cầu của con người trong lĩnh vực giải trí trên diđộng ngày càng cao và Android chính là nền tảng ứng dụng có thể phát triển trong

tương lai Chính vì vậy nhóm thực hiện chọn đề tài “Xây dựng ứng dụng 3D với Android” nhằm hiểu rõ về các kĩ thuật lập trình trên thiết bị động, đặc biệt là các kĩ

thuật xây dựng đồ họa 3D trên di động để có thể tạo nên một game 3D hoàn chỉnh

Trang 11

Nhưng vì thời gian, cũng như năng lực của nhóm có hạn, cho nên chỉ giới hạn ởviệc tìm hiểu cách thức hoạt động, nghiên cứu cơ bản các chức năng, sử dụng bộ công

cụ Android SDK và một số hàm chức năng của OpenGL ES để vẽ một số hình ảnh 3D

cơ bản mục đích nghiệm thu quá trình tìm hiểu

Đề tài bao gồm:

Phần A: Xây dựng ứng dụng 3D với Android

Chương 1: Tổng quan về ứng dụng trên Android

Chương 2: Các thành phần cơ bản của một ứng dụng trên Android

Chương 3: Thiết kế giao diện

Tài liệu tham khảo

PHẦN A: XÂY DỰNG ỨNG DỤNG 3D VỚI ANDROID

Chương 1: Tổng quan về ứng dụng trên android

Trang 12

1.1 Lược sử về Android:

Android được phát hành phiên bản đầu tiên 11/11/2007, là một môi trường hệđiều hành hoàn chỉnh dựa trên hệ điều hành nhân Linux V2.6 Lúc đầu, đích triển khaiđối với Android là lĩnh vực điện thoại di động, gồm các loại điện thoại thông minh vàcác loại thiết bị điện thoại kiểu gập chi phí thấp Tuy nhiên, phạm vi đầy đủ các dịch

vụ điện toán của Android và sự hỗ trợ chức năng phong phú của nó có tiềm năng mởrộng ra ngoài thị trường điện thoại di động Android còn có thể hữu ích đối với các nềntảng và ứng dụng khác

Nền Android là sản phẩm của Open Handset Alliance (Liên minh thiết bị cầmtay mở), một tập đoàn các tổ chức cùng hợp tác với nhau để xây dựng nên một loạiđiện thoại di động tốt hơn Tập đoàn do Google đứng đầu này gồm các nhà vận hành(điện thoại) di động, các nhà sản xuất thiết bị cầm tay, sản xuất linh kiện, các nhà cungcấp nền và giải pháp phần mềm và các công ty tiếp thị Từ một quan điểm phát triểnphần mềm, Android trở thành trung tâm của thế giới mã nguồn mở và rất có tiềm năngphát triển

Thiết bị cầm tay có khả năng Android đầu tiên trên thị trường là thiết bị G1 doHTC sản xuất và được bán trên T-Mobile Nó trở nên sẵn có sau gần một năm đồn đại,khi mà các công cụ phát triển phần mềm sẵn có duy nhất chỉ là một số bản phát hành

Bộ công cụ phát triển phần mềm (SDK) được cải tiến dần từng bước Khi ngày pháthành G1 gần đến, nhóm Android đã phát hành SDK V1.0 và các ứng dụng bắt đầuvượt lên nhằm hướng tới nền tảng mới này

Để kích thích đổi mới và phát triển các ứng dụng của Android, Google đã tài trợhai vòng cuộc thi “Các thách thức nhà phát triển Android”, và hàng triệu đô la đã được

đổ vào các ứng dụng dự thi hàng đầu Vài tháng sau G1, Android Market được pháthành, cho phép người sử dụng duyệt và tải về các ứng dụng trực tiếp vào điện thoại của

họ Trong vòng 18 tháng, một nền di động mới đã chính thức có mặt trên thị trường và

Trang 13

sẽ là đối thủ cạnh tranh nặng ký của các nền di động phổ biến trước đó như Symbianhay Window Mobile.

Android cung cấp khá đầy đủ các công cụ cơ bản và được thiết kế sao cho cácnhà phát triển có thể tận dụng tối đa lợi thế của thiết bị cầm tay để xây dựng nên cácứng dụng thực sự thuyết phục Họ có thể tạo một ứng dụng có thể gọi thực hiện cácchức năng lõi trong điện thoại như thực hiện cuộc gọi, gửi tin nhắn SMS, dùng camera

… hay chia sẻ thông tin cá nhân lên trang web chẳn hạn như thông tin liên lạc, vị trí địa

lí, lịch biểu… Các nhà phát triển còn có thể làm bất cứ việc gì trên thiết bị Android bởi

vì hệ thống Android giao tiếp thông qua các Intents – nó đơn giản là một chuỗi mô tảmột hành động nào đó – ví dụ: “android.provider.Telephony.SMS_RECEIVED”.Android còn cung cấp sẵn các dịch vụ định vị (và đây là một thế mạnh của Google)cùng với một tập các ứng dụng về “Map” với các tính năng rất ấn tượng như dò đường,tính khoảng cách địa điểm, tìm bạn … Ngoài ra còn có một số tính năng nổi bật khác như Animation và đồng thời cũng hỗ trợ media-playback.

Android đã dần hoàn thiện qua các phiên bản, mà phiên bản mới nhất hiện nay

là Android 3.1

1.2 Nền tảng Android:

Với khả năng rộng rãi của Android, sẽ rất dễ dàng nhầm lẫn nó với một hệ điềuhành máy tính để bàn Android là một môi trường phân tầng, xây dựng trên nền của hệđiều hành nhân Linux, và nó bao hàm nhiều chức năng phong phú Hệ thống giao diệnngười sử dụng gồm có:

 Cửa sổ

 Khung hình

 Các tiểu trình để hiển thị các phần tử phổ biến như các hộp biên soạn,danh sách, danh sách thả xuống

Trang 14

Android gồm một trình duyệt có thể nhúng vào được, được xây dựng dựa trênWebKit, chính là máy (engine) trình duyệt mã nguồn mở cũng đang là động cơ củatrình duyệt Safari của iPhone.

Android khoe ra một mảng dồi dào nhiều tùy chọn kết nối, gồm WiFi, Bluetooth

và dữ liệu không dây qua một kết nối di động (như GPRS, EDGE và 3G) Một kỹ thuậtphổ biến trong các ứng dụng Android là liên kết tới Google Maps để hiển thị một địachỉ trực tiếp trong một ứng dụng Việc hỗ trợ cho các dịch vụ dựa trên địa điểm (chẳnghạn như GPS) và các dụng cụ đo gia tốc cũng có sẵn trong gói phần mềm Android,mặc dù không phải tất cả các thiết bị Android được trang bị với các phần cứng cầnthiết Ngoài ra còn có cả hỗ trợ máy ảnh nữa (camera)

Về mặt lịch sử, có hai lĩnh vực mà các ứng dụng di động đã gắng sức theo kịpcác đối tác máy tính để bàn là đồ họa/đa phương tiện và phương thức lưu trữ dữ liệu.Android giải quyết thách thức về đồ họa bằng sự hỗ trợ dựng sẵn cho đồ họa 2D và 3D,gồm cả thư viện OpenGL Gánh nặng lưu trữ dữ liệu được giảm nhẹ vì nền Android cógồm cả cơ sở dữ liệu SQLite mã nguồn mở phổ biến Hình 1 cho thấy một khung hìnhđơn giản hóa về các tầng phần mềm Android

Trang 15

Hình 1 – Cấu trúc Android

1.3 Kiến trúc ứng dụng Android:

1.3.1 Máy ảo Dalvik:

Các ứng dụng Android được viết bằng ngôn ngữ lập trình Java và chúng chạytrong một máy ảo (VM) Điều quan trọng phải lưu ý rằng VM không phải là một máy

ảo Java mà là máy ảo Dalvik (Dalvik Virtual Machine), một công nghệ mã nguồn mở.Chiếc máy ảo này dựa trên việc đăng kí (register-based) và được thiết kế bởi DanBornstein và một vài kĩ sư của Google Thuật ngữ “register-based” đã nói lên sự khácbiệt giữa máy ảo Android với máy ảo JAVA thông thường Tương tự như máy ảoJAVA, đây cũng chỉ là một máy ảo thông dịch, nhưng thông dịch các file có địnhdạng dex (Dalvik Execute) – một định dạng giúp tối ưu bộ nhớ và khả năng lưu trữcủa máy ảo – Các máy ảo JAVA ngày nay chủ yếu dựa trên ngăn xếp (Stack-based),

Trang 16

với tính chất này cho phép rút ngắn thời gian thực thi chương trình Mỗi ứng dụngAndroid chạy trong một cá thể của máy ảo Dalvik, khi đến lượt, cá thể máy ảo này nằmtrong một tiến trình do nhân Linux quản lý, như trình bày dưới đây.

Hình 2 – Máy ảo Dalvik

1.3.2Các thành phần của một ứng dụng Android:

Một ứng dụng Android gồm 4 thành phần chính sau:

Hoạt động (Activity): một ứng dụng có một giao diện người dùng nhìn

thấy được, sẽ được thực hiện bằng một Activity Activity dùng Views đểtạo nên giao diện đồ họa người dùng, để hiển thị thông tin và đáp lại cáchành động của người dùng Khi người dùng chọn một ứng dụng từ mànhình chủ hoặc trình khởi chạy ứng dụng thì một Activity được khởi động.Activity trong Android cũng tương tự như một Form trong các ứng dụngdesktop truyền thống

Trang 17

Dịch vụ (Services): các service làm việc ẩn dưới ứng dụng, được sử dụng

để thực hiện các xử lý thông thường khi cần và thậm chí ngay cả lúc cácActivity không hoạt động hoặc ẩn đi.Một dịch vụ nên được sử dụng đốivới bất kì ứng dụng nào cần tồn tại trong một thời gian dài, chẳng hạnnhư một trình giám sát mạng hoặc ứng dụng kiểm tra cập nhật

Trình cung cấp nội dung (Content Providers): có thể coi như là một máy

chủ cơ sở dữ liệu Công việc của nó là quản lý truy cập và chia sẻ dữ liệuđang tồn tại, chẳng hạn như một cơ sở dữ liệu SQLite Nó có thể đượccấu hình để cho phép các ứng dụng khác truy xuất và ngược lại Nếu ứngdụng rất đơn giản thì không nhất thiết phải tạo ra một trình cung cấp nộidung

Trình thu phát (Broadcast Receivers): bằng cách tạo và đăng ký một

Broadcast Receiver, ứng dụng Android có thể lắng nghe toàn bộ cácIntent theo một chuẩn cụ thể được chỉ định Các Broadcast Receiver sẽchạy ứng dụng một cách tự động để đáp ứng một Intent gửi đến, hay xử

lý một phần tử dữ liệu hoặc đáp ứng một sự kiện, chẳng hạn như nhậnmột văn bản thông báo

Việc tách rời sự phụ thuộc giữa các thành phần trong ứng dụng giúp việc chia sẽcũng như trao đổi giữa các ứng dụng khác trở nên dễ dàng hơn

1.4 Vòng đời của ứng dụng Android:

Không giống như các ứng dụng trên các nền tảng khác, các ứng dụng Androidkhông có một điều khiển đến vòng đời của chúng Thay vào đó, các thành phần ứngdụng phải lắng nghe việc thay đổi trạng thái bên trong của ứng dụng đó và tác độngtrở lại một cách hợp lý Mỗi một ứng dụng Android ở trong chính tiến trình của nó,chạy một thể hiện riêng biệt của Dalvik Việc quản lý bộ nhớ và tiến trình của mỗi ứngdụng Android được điều khiển một cách riêng trong lúc runtime

Trang 18

Android quản lý tài nguyên một cách chặt chẽ, nó sẽ làm bất cứ việc gì để đảmbảo cho thiết bị duy trì đáp ứng Điều này có nghĩa là các tiến trình sẽ bị hủy đi màkhông có một cảnh báo nào nếu cần giải phóng tài nguyên cho các ứng dụng có độ ưutiên cao.

1.5 Các công cụ để tạo một ứng dụng Android:

Để bắt đầu phát triển các ứng dụng Android, chúng ta cần có Bộ công cụ pháttriển phần mềm Android (SDK) và môi trường phát triền tích hợp Eclipse (EclipseIDE) Việc phát triển Android có thể diễn ra trên Microsoft Window, Mac OS X hoặcLinux Trong tiểu luận này, nhóm thực hiện sẽ phát triển ứng dụng Android bằngMicrosoft Window

1.5.1 Eclipse IDE:

Các ứng dụng Android được viết bằng ngôn ngữ Java, nhưng biên dịch và thihành bằng máy ảo Dalvik Viết mã bằng ngôn ngữ Java trong Eclipse là rất trực quan.Eclipse cung cấp một môi trường Java phong phú, gồm cả việc trợ giúp theo ngữ cảnh

và các mách nước gợi ý về mã Khi bộ mã Java được biên dịch thành công, AndroidDeveloper Tools sẽ đảm bảo rằng ứng dụng đó được đóng gói một cách đúng đắn, gồm

cả tập tin AndroidManifest.xml

1.5.2 Android SDK:

Bộ công cụ phát triển ứng dụng Android SDK là công cụ giả lập thiết bị ảo trênmáy tính để phát triển ứng dụng với các hàm API hỗ trợ cho những lập trình viên lậptrình trên các thiết bị di động sử dụng nền tảng Android thông qua ngôn ngữ lập trìnhJava SDK gồm có:

android.jar : tập tin lưu trữ Java chứa toàn bộ các lớp SDK Android cần

thiết để xây dựng ứng dụng

Trang 19

documention.html và thư mục docs: tài liệu SDK được cung cấp tại chỗ

và trên web, chủ yếu nó ở dạng JavaDocs, tạo điều kiện dễ dàng cho việchướng dẫn trong nhiều gói SDK Tài liệu cũng gồm cả hướng dẫn pháttriển mức cao và các liên kết đến cộng đồng Android rộng rãi

Thư mục sample (các ví dụ mẫu): thư mục con samples chứa bộ mã nguồn

đầy đủ dùng cho một loạt các ứng dụng, gồm cả ApiDemo, nó sử dụngnhiều API Ứng dụng mẫu là một nơi khám phá tuyệt vời khi bắt đầu pháttriển ứng dụng Android

Thư mục tools (các công cụ): chứa toàn bộ các công cụ dòng lệnh để xây

dựng nên các ứng dụng Android Công cụ được dùng phổ biến và hữu íchnhất là tiện ích adb (Android Debug Bridge)

Usb_driver: thư mục chứa các trình điều khiển cần thiết để kết nối môi

trường phát triển với một thiết bị có khả năng chạy Android, chẳng hạnnhư G1 hay điện thoại đã được phát triển Android Dev 1 Các tập tin này làđòi hỏi duy nhất đối với các nhà phát triển đang sử dụng nền Windows

1.5.3 Cài đặt công cụ:

Chuẩn bị:

o Phần mềm Eclipse IDE (phiên bản 3.2 trở lên), có thể tải trực tiếp

từ trang web http://www.eclipse.org/downloads/

o Bộ công cụ Android SDK phiên bản mới nhất, tại thời điềm thựchiện tiểu luận này là phiên bản r11, có thể tải từ trang webhttp://developer.android.com/sdk/index.html

Bắt đầu việc cài đặt:

Trang 20

o Giải nén chương trình Eclipse vào một thư mục nào đó (ví dụ: D:\

eclipse\)

o Giải nén bộ Android SDK vào một thư mục bất kỳ (ví dụ: D:\

Android_SDK_r11\)

o Chạy chương trình Eclipse.

o Vào menu Help – Software Updates …

o Chọn tab Available Software

o Chọn Add Site, nhập vào đường dẫn sau:

http://dl-ssl.google.com/android/eclipse/

o Chọn OK

o Chờ cho chương trình được cài đặt

o Sau khi cài xong, tiếp tục vào menu Window – Preferences

o Chọn tab Android, chỉ đường dẫn đến thư mục đã giải nénAndroid SDK ở trên (ở đây là D:\Android_SDK_r11\)

o Hoàn tất

Lưu ý : Cách cài đặt ở trên đòi hỏi máy tính phải được nối mạng Internet.

1.6 Thiết bị Android ảo (Android Virtual Device - AVD):

Các ứng dụng Android có thể được chạy trên một thiết bị thật sự hoặc trên trình

mô phỏng Android (Android Emulator) kèm với SDK Android

Từ phiên bản SDK 1.5, Google đã giới thiệu khái niệm về thiết bị Android ảo.Một thiết bị Android ảo chỉ đơn giản là một tập các thuộc tính cấu hình được áp dụngcho hình ảnh của một thiết bị mô phỏng để hiển thị ứng dụng lên nó

Cách tạo một thiết bị Android ảo như sau:

- Trong Eclipse à window à Android SDK and AVD manager

Trang 21

- Ở cửa sổ mới hiện ra, chọn mục Virtual devices à bấm nút New, hiện ra mộtcửa sổ mới như hình sau đây:

Hình 3– Tạo một AVD

- Mục Name: đặt tên cho thiết bị, tên gì cũng được, cốt là dễ nhớ và để phânbiệt, không chứa khoản trắng và các ký tự đặc biệt

- Mục Target: chọn phiên bản hệ điều hành Android

- Mục SD Card: điền kích thước bộ nhớ của thiết bị hoặc lấy một file SD Card

có sẵn

- Nhấn nút Create AVD

Trang 22

Hình 4 – Trình mô phỏng thiết bị Android.

1.7 Android project:

1.7.1 Tạo một Android project mới:

- Trong Eclipse, chọn File à New à Android Project

- Một cửa sổ mới hiện ra, điền các thông tin tương ứng vào cửa sổ

- Project name: tên project

- Chọn phiên bản Android

- Application name: tên ứng dụng

Trang 23

- Package name: tên gói.

- Create activity: tên hoạt động

- Min SDK Version: API Level tương ứng với phiên bản Android

- Nhấn nút Finish

Hình 5 – Tạo một Android project

Trang 24

1.7.2 Cấu trúc một project:

Một Android project gồm các thư mục sau:

• Thư mục src chứa source code ứng dụng Gồm các package và các class.

• Thư mục gen chứa các file tự động phát sinh (mà thường gặp nhất là

R.class)

• Thư mục res để chứa các resource dùng trong ứng dụng (thông qua ID).

• Thư mục assets chứa các resource file mà ứng dụng cần dùng (dưới dạng

file)

• File Manifest là file khai báo thông tin về ứng với hệ thống (như ứng

dụng gồm những màn hình nào, có service nào… xin các quyền gì, phiênbản bao nhiêu, dùng từ SDK phiên bản nào…)

• File thư viện

Trang 25

Chương 2: Các thành phần cơ bản của một ứng dụng trên Android

package com.paad.myapplication;

import android.app.Activity;

import android.os.Bundle;

public class MyActivity extends Activity {

/** Called when the activity is first created */

@Override public void onCreate(Bundle icicle) {

} }

Trang 26

Một lớp Activity cơ bản đưa ra một màn hình rỗng chứa cửa sổ hiển thị Vì vậyviệc cần thực hiện đầu tiên là khai báo bố cục cho nó bằng cách sử dụng các View vàlayout Activity UI được tạo thành bởi các View View là các điều khiển giao diệnngười dùng, hiển thị dữ liệu và cung cấp tương tác đến người dùng

Để gắn một giao diện cho một Activity, sử dụng phương thức setContentView

trong lớp Activity được kế thừa

Để dùng một Activity cần khai báo bên trong file manifest Thêm vào một thẻ

activity mới bên trong nút application Thẻ activity này bao gồm các thuộc tính cho

siêu dữ liệu (label, icon,…) Một Activity mà không được khai báo một thẻ activity

tương ứng sẽ không được khởi chạy

Trang 27

Ví dụ sau mô tả cách làm thế nào để khai báo Activity đã được tạo ở phần trên:

</activity>

2.1.2 Vòng đời của Activity:

Hình 6 – Vòng đời của Activity

Trang 28

2.1.3 Khởi động một Activity:

Để khởi động một Activity, chúng ta dùng Intent:

o Khai báo tường minh: cung cấp chính xác thông tin của activity cần gọi(nếu cùng ứng dụng chỉ cần cung cấp tên class, nếu ứng dụng khác nhauthì cung cấp tên package, tên class) Ví dụ: đoạn code bên dưới sẽ khởiđộng activity tên là TargetActivity

Intent intent = new Intent(getApplicationContext(),TargetActivity.class); startActivity(intent);

o Khai báo không tường minh: cung cấp thao tác cần làm gì, với loại dữliệu nào, thao tác thuộc nhóm nào… hệ thống sẽ tìm activity tương ứng

để khởi động Ví dụ: đoạn code bên dưới sẽ khởi động một activity nào

đó đăng có khả năng xem ảnh

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI)

; startActivity(intent);

Với cách khởi động activity không tường minh, chúng ta cần phải biết một chút

về Intent-filter Intent-filter sẽ giúp một activity đăng ký với hệ thống mình có thể làmđược thao tác gì, trong nhóm nào, với loại dữ liệu nào Như vậy khi intent và intent-filter khớp nhau, activity sẽ được hệ thống khởi động

2.1.4 Liên lạc giữa 2 activity:

Có thể khởi động một activity với một yêu cầu nào đó và activity kia khi làmxong công việc sẽ trả lại kết quả cho activity trước Ví dụ activity A yêu cầu một

Trang 29

activity làm giúp việc chụp ảnh, activity B đáp ứng được việc này, sau khi user chụpảnh xong sẽ trả lại file ảnh cho activity A Để liên lạc 2 activity chúng ta làm nhu sau:

– Khi khởi động một activity, ta có thể gửi kèm dữ liệu trong intent như ví

dụ sau:

intent.putExtra("value1", new String("Hello"));

intent.putExtra(“value2", new Long(100));

– Bên phía activity được khởi động, có thể lấy dữ liệu được gửi như sau:

BroadcastReceiver chỉ có duy nhất một phương thức onReceive()

– Khi có sự kiện mà BroadcastReceiver đã đăng ký nhận được phát đi, thìphương thức onReceive() của BroadcastReceiver đó sẽ được gọi

– Sau khi thực thi xong phương thức này, vòng đời của BroadcastReceiverkết thúc

Trang 30

 Lưu ý khi sử dụng: Ngay khi onReceive() kết thúc, hệ thống coi như receiver đãkhông còn hoạt động và có thể giải phóng tiến trình chứa receiver này bất cứ lúcnào.

àTránh xử lý các code quá lâu trong onReceive()

à Không có xử lý bất đồng bộ, chờ callback… trong Receiver (cụ thể nhưhiển thị Dialog, kết nối service…)

2.2.2 Một số broadcast thông dụng:

o Báo hệ thống khởi động xong

o Báo pin có sự thay đổi

o Báo có package mới cài vào hoặc xóa đi

o Báo tắt máy

o Báo cắm sạc, rút sạc

o Thông báo tin nhắn tới

o Thông báo cắm, rút thẻ nhớ

o Thông báo có cuộc gọi đi

o Broadcast do người phát triển ứng dụng tự định nghĩa (giúp liên lạc hoặcthông báo một sự kiện giữa các ứng dụng)

Trang 31

o intent: intent được truyền vào sẽ có đầy đủ thông tin như sự kiện nào màreceiver này đăng ký đã xảy ra dẫn đến onReceive() được gọi, có gửikèm thông tin gì hoặc dữ liệu gì hay không Xem các api:

Trang 32

public void onStart(Intent intent, int startId) {

// TODO: Actions to perform when service is started.

}

@Override

public void onCreate() {

// TODO: Actions to perform when service is created.

}

@Override

public IBinder onBind(Intent intent) {

// TODO: Replace with service binding implementation.

return null;

} }

Để bắt đầu một Service, sử dụng phương thức startService Nếu Service yêu cầu

quyền truy cập không tồn tại trong ứng dụng thì một ngoại lệ SecurityException sẽđược đưa ra Có 2 cách để bắt đầu một Service mới

+ Cách 1: khởi động ngầm Ví dụ:

startService(new Intent(MyService.MY_ACTION));

+ Cách 2: khởi động tường minh Ví dụ:

startService(new Intent(this, MyService.class));

Để dừng một Serivce, sử dùng phương thức stopService, truyền vào Intent xác

định Service cần ngưng hoạt động Ví dụ:

ComponentName service = startService(new Intent(this, BaseballWatch.class)); // ngừng dịch vụ bằng cách xác định tên dịch vụ

Trang 33

stopService(new Intent(this, service.getClass()));

// ngừng dịch vụ bằng cách tường minh

try {

Class serviceClass = Class.forName(service.getClassName());

stopService(new Intent(this, serviceClass));

} catch (ClassNotFoundException e) {}

2.3.2 Vòng đời của Services:

Hình 7 – Vòng đời của service

o Khi có một context nào đó gọi startService() để khởi động một dịch vụmong muốn Nếu dịch vụ đó chưa được tạo thì sẽ gọi onCreate() rồi gọitiếp onStart() và khi đó dịch vụ chạy nền bên dưới

onCreate()

onStart()

onDestroy()

Service đang chạy

Service được start

lần đầu

Service lại được yêu

cầu start trong khi đã

chạy rồi

Bên ngoài gọi stopService() hoặc service tự stop

Trang 34

o Nếu sau đó lại có một context muốn khởi động dịch vụ này mà dịch vụ

đã đang chạy thì chỉ có phương thức onStart() của dịch vụ được gọi

o Dù dịch vụ có được gọi khởi động bao nhiêu lần thì cũng chỉ có thể hiệncủa dịch vụ và chỉ cần gọi stopService() một lần để kết thúc dịch vụ

2.3.3 Kết nối dịch vụ:

Khi một Activity được kết nối tới một Service, nó duy trì một tham chiếu đến

một thực thể Service Để kết nối đến thực thể này, thực thi phương thức onBind như

Trang 35

// xử lý kết nồi giữa service và activity

private ServiceConnection mConnection = new ServiceConnection() {

public void onServiceConnected(ComponentName className, IBinder

service) { // được gọi khi liên kết được thực hiện

Intent bindIntent = new Intent(MyActivity.this, MyService.class);

}

 Hoạt động của bindService(): kết nối dịch vụ

Trang 36

Hình 8 – Hoạt động kết nối dịch vụ

Thông thường, vòng đời của dịch vụ khi có client kết nối từ đầu như sau:

o Cũng bắt đầu bằng onCreate() rồi đến onBind() và dịch vụ chạy dướinền

o Khi không còn client kết nối tới thì dịch vụ gọi onUnbind() rồionDestroy()

Có một số trường hợp không thông thường, ví dụ như:

o Có một context khởi động một dịch vụ, sau đó có một số client kết nối(bind) tới service

o Có nhiều client cùng lúc kết nối tới dịch vụ

o Một activity vừa gọi startService() vừa gọi bindService()

onCreate() onBind()

Service đang chạy

onUnbind()

Service không còn kết nối với client nào nữa và cũng ko

có context nào start service này

onDestroy()

Service còn chạy, client muốn kết nối với service

onRebind()

Lần trước unBind() với client này trả về true

Trang 37

2.4 Trình cung cấp nội dung (Content Providers):

2.4.1 Giới thiệu:

Có thể coi trình cung cấp nội dung như là một máy chủ cơ sở dữ liệu Công việc

của nó là quản lý truy cập và chia sẻ dữ liệu đang tồn tại, chẳng hạn như một cơ sở dữliệu SQLite Nó có thể được cấu hình để cho phép các ứng dụng khác truy xuất vàngược lại Nếu ứng dụng rất đơn giản thì không nhất thiết phải tạo ra một trình cungcấp nội dung

Content Provider giúp tách biệt tầng ứng dụng ra khỏi tầng dữ liệu Nó có đầy đủcác quyền điều khiển và được truy xuất thông qua mô hình URI đơn giản như là có thểthêm, xóa, cập nhật dữ liệu của các ứng dụng

2.4.2 Tạo một Content Provider mới:

2.4.2.1 Tạo Content Provider:

Để tạo một Content Provider cần thừa kế lại từ lớp trừu tượng ContentProvide, override lại phương thức onCreate.

public boolean onCreate() {

} }

Trang 38

Nên cung cấp một biến static CONTENT_URI trả về một URI của provider này.Content URI phải là duy nhất giữa các provider, vì thế nên dựa vào tên package để xácđịnh URI, hình thức chung cho việc định nghĩa một Content Provider URI là:

content://com.<CompanyName>.provider.<ApplicationName>/<DataPath>

Ví dụ:

content://com.paad.provider.myapp/items

Content URI có thể ở 2 dạng thể hiện Ví dụ trên là URI ở dạng request tất cả các

giá trị Việc thêm vào cuối /<rownumber>, sẽ request một record đơn.

content://com.paad.provider.myapp/items/5

Các đơn giản nhất để làm việc này là sử dụng URIMatcher Cấu hình

UriMatcher để phân tích hình thức của nó khi provider đang được truy xuất đến thông

qua một Content Resolver Xét ví dụ sau:

public class MyProvider extends ContentProvider {

“content://com.paad.provider.myapp/items”;

public static final Uri CONTENT_URI = Uri.parse(myURI);

@Override

public boolean onCreate() {

// TODO: Construct the underlying database.

return true;

}

// tạo các hằng số được dùng để phân biệt các yêu cấu URI khác nhau

Trang 39

private static final int ALLROWS = 1;

private static final int SINGLE_ROW = 2;

private static final UriMatcher uriMatcher;

// thông thường đối tượng UriMatcher, nơi mà một URI kết thúc bằng ‘items’ sẽ // tương ứng với một yêu cầu tất cả item, và ‘items/[rowID]’ sẽ tương ứng với một

// hàng đơn

static {

uriMatcher.addURI(“com.paad.provider.myApp”, “items”, ALLROWS);

uriMatcher.addURI(“com.paad.provider.myApp”, “items/#”,

SINGLE_ROW);

}

}

2.4.2.2 Đưa ra truy xuất Data Source:

Có thể cung cấp các truy vấn và thực thi với Content Provdier bằng cách thực

hiện các phương thức delete, insert, update và query Các phương thức này hoạt động

như các giao tiếp chung đến nguồn dữ liệu bên dưới, chúng cho phép các ứng Androidchia sẽ dữ liệu với nhau mà không phải tạo một giao tiếp riêng cho mỗi ứng dụng

Ví dụ: một đối tượng UriMatcher được sử dụng để lọc các thực thi và các câu

truy vấn

@Override

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sort) {

Trang 40

// nếu là truy vấn 1 hàng thì hạn chế kết quả

switch (uriMatcher.match(uri)) {

case SINGLE_ROW : // TODO: Modify selection based on row id, where:

// rowNumber = uri.getPathSegments().get(1));

} return null;

}

@Override

public Uri insert(Uri _uri, ContentValues _initialValues) {

long rowID = [ Add a new item ]

Ngày đăng: 15/03/2014, 17:20

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
3. Reto Meier. Professional Android™ Application Development. Wiley Publishing, Inc. 2009 Sách, tạp chí
Tiêu đề: Professional Android™ Application Development
4. Mikael Gustavssom. 3D Game Engine Design for Mobile Phones with OpenGL ES 2.0. Master of Science Thesis Stockholm, Sweden. 2008 Sách, tạp chí
Tiêu đề: 3D Game Engine Design for Mobile Phones with OpenGL ES 2.0
5. Kari Pulli, Tomi Aarnio, Ville Miettinen, Kimmo Roimela, Jani Vaarala. Mobile 3D Graphics with OpenGL ES and M3G. Morgan Kaufmann Publishers.Elsevier Inc. 2008 Sách, tạp chí
Tiêu đề: Mobile 3D Graphics with OpenGL ES and M3G
6. Aaftab Munshi, Jon Leech. OpenGL ES Common Profile Specification. The Khronos Group Inc. 2009 Sách, tạp chí
Tiêu đề: OpenGL ES Common Profile Specification
7. Frank Ableson. Nhập môn phát triền ứng dụng Android. 2011 Sách, tạp chí
Tiêu đề: Nhập môn phát triền ứng dụng Android
8. Bùi Minh Trường. Lập trình Opengl với thư viện AUX. www.nhipsongcongnghe.net Sách, tạp chí
Tiêu đề: Lập trình Opengl với thư viện AUX
9. Android OpenGL ES Issues. OmniG Software Inc. 2008 Sách, tạp chí
Tiêu đề: Android OpenGL ES Issues
10. Phan Mạnh Cường. Luận văn Ngiên cứu lập trình C++ trên Symbian. 2009 Sách, tạp chí
Tiêu đề: Luận văn Ngiên cứu lập trình C++ trên Symbian
11. Châu Duy Thiện, Vũ Thùy Linh, Lê Quốc Tiến. Tiểu luận Tìm hiểu và viết ứng dụng trên nền hệ điều hành mobile Android. 2010 Sách, tạp chí
Tiêu đề: Tìm hiểu và viết ứng dụng trên nền hệ điều hành mobile Android

HÌNH ẢNH LIÊN QUAN

Hình 1 – Cấu trúc Android 1.3 Kiến trúc ứng dụng Android: - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 1 – Cấu trúc Android 1.3 Kiến trúc ứng dụng Android: (Trang 9)
Hình 2 – Máy ảo Dalvik - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 2 – Máy ảo Dalvik (Trang 10)
Hình  3– Tạo một AVD - Đề tài: Xây dựng ứng dụng 3D với Android docx
nh 3– Tạo một AVD (Trang 15)
Hình 4 – Trình mô phỏng thiết bị Android. - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 4 – Trình mô phỏng thiết bị Android (Trang 16)
Hình 5 – Tạo một Android project - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 5 – Tạo một Android project (Trang 17)
Hình 6 – Vòng đời của Activity 2.1.3 Khởi động một Activity: - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 6 – Vòng đời của Activity 2.1.3 Khởi động một Activity: (Trang 21)
Hình 9 -  Quan hệ giữa các thành phần trên - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 9 Quan hệ giữa các thành phần trên (Trang 41)
Hình 10 - Hệ thống các view với các thông số layout được kết nối với mỗi view - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 10 Hệ thống các view với các thông số layout được kết nối với mỗi view (Trang 43)
Hình 13 - Submenu - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 13 Submenu (Trang 51)
Hình  14 - Phép chiếu trực giao - Đề tài: Xây dựng ứng dụng 3D với Android docx
nh 14 - Phép chiếu trực giao (Trang 62)
Hình được tạo ra bằng cách xác định các đỉnh, đây là những điểm trong không  gian 3 chiều vỡ vậy cần chỉ rừ cỏc điểm trờn hỡnh. - Đề tài: Xây dựng ứng dụng 3D với Android docx
nh được tạo ra bằng cách xác định các đỉnh, đây là những điểm trong không gian 3 chiều vỡ vậy cần chỉ rừ cỏc điểm trờn hỡnh (Trang 62)
Hình 15 – Kết quả phép chiếu trực giao - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 15 – Kết quả phép chiếu trực giao (Trang 65)
Hình  16 - Phép chiếu phối cảnh - Đề tài: Xây dựng ứng dụng 3D với Android docx
nh 16 - Phép chiếu phối cảnh (Trang 66)
Hình 17 – Mô tả góc nhìn của camera - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 17 – Mô tả góc nhìn của camera (Trang 68)
Hình 24 – Kết quả định hướng ánh sáng - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 24 – Kết quả định hướng ánh sáng (Trang 91)
Hình 25 – Kết quả dán chất liệu - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 25 – Kết quả dán chất liệu (Trang 103)
Hình 26 – Pha màu (GL_ONE, GL_ZERO) - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 26 – Pha màu (GL_ONE, GL_ZERO) (Trang 107)
Hình 27 – Pha màu (GL_ONE, GL_ONE) - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 27 – Pha màu (GL_ONE, GL_ONE) (Trang 108)
Hình 29 – Pha màu (GL_SRC_ALPHA, GL_ONE) - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 29 – Pha màu (GL_SRC_ALPHA, GL_ONE) (Trang 109)
Hình 28 – Pha màu (GL_ONE, GL_ONE_MINUS_DST_ALPHA) - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 28 – Pha màu (GL_ONE, GL_ONE_MINUS_DST_ALPHA) (Trang 109)
Hình 30 – Pha màu (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 30 – Pha màu (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) (Trang 110)
Hình 33 - Menu More - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 33 Menu More (Trang 120)
Hình 36 - Menu phép biến đổi - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 36 Menu phép biến đổi (Trang 122)
Hình 39 – Demo chiều sâu - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 39 – Demo chiều sâu (Trang 123)
Hình 38 – Kết hợp các phép biến đổi - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 38 – Kết hợp các phép biến đổi (Trang 123)
Hình 41 – Demo vẽ mặt nón - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 41 – Demo vẽ mặt nón (Trang 124)
Hình 40 –Demo vẽ mặt trụ - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 40 –Demo vẽ mặt trụ (Trang 124)
Hình 41 – Demo vẽ mặt nón cụt - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 41 – Demo vẽ mặt nón cụt (Trang 125)
Hình 42 – Demo vẽ mặt cầu - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 42 – Demo vẽ mặt cầu (Trang 125)
Hình 43 – Mô phỏng đường hầm 3D - Đề tài: Xây dựng ứng dụng 3D với Android docx
Hình 43 – Mô phỏng đường hầm 3D (Trang 126)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w