Saturday, April 26, 2014

Đăng ký Google Map API cho Android

Hiển thị Google Maps trong ứng dụng

Để có thể hiển thị được bản đồ của Google trong ứng dụng chúng ta cần phải thực hiện một số bước nhất định

Bước 1. Cài đặt Google play service

Bước 2. Đăng ký sử dụng Google map API version 2 với Google

Bước 3. Nhận Map API key cho Android do Google cung cấp

Bước 4. Gán key vào ứng dụng và cấp quyền truy cập cho ứng dụng

Cài đặt Google play service

- Đăng ký tài khoản Google (cái này là bắt buộc)

- Sau khi đã cập nhật Google Play Service Library, sử dụng eclipse mở project đã được lấy về qua thao tác cập nhật.

-File ->Import -> Existing Android code into workspace

-Tham chiếu tới thư mục Android SDK –> extras ->google_play_services  -> libproject và chọn google-play-services_lib

- Tạo Android project mới “MapDemo” và tham chiếu tới google-play-services_lib: Nhấn phải lên Android project vừa tạo chọn Properties à Android à nhấn Add và chọn project mới tham chiếu bên trên.

- Mở tập tin AndroidManifest.xml của MapDemo và bổ sung thông tin thư viện của Google Play. Bổ sung thẻ sau vào thẻ <Application>

1 <meta-data
2 android:name="com.google.android.gms.version"
3 android:value="@integer/google_play_services_version" />

Đăng ký sử dụng Google map API version 2 với Google

Google map là một dịch vụ được Google cung cấp va cho phép gọi từ xa. Google quản lý các ứng dụng/ hệ thống gởi yêu cầu sử dụng dịch vụ thông qua định danh hay ta gọi là Maps API key loại định danh cho dịch vụ bản đồ. Hình dung đơn giản như là giấy phép cấp cho ứng dụng để sử dụng dịch vụ bản đồ, mỗi khi ứng dụng gởi yêu cầu truy xuất bản đồ thì cũng trao giấp phép này cho server để xác định được phép hay không được sử dụng.

Ø Mở trình duyệt và di chuyển đến Google Console địa chỉ như sau https://code.google.com/apis/console/?noredirect để đăng ký. Ở gốc cao bên trái chúng sẽ thấy một một xổ có nhãn là API Project xổ và kéo xuống cuối chọn Create để tạo một projectimage

Nhấn Create project à kéo danh sách hiện ra và tìm đến

 image

Chọn vào “OFF” để sử dụng dịch vụ cho ứng dụng Android. Tiếp theo, chọn mục API Access ở menu gốc cao bên trái. Chọn vào nút “Create new Android key …”

image

Đến đây để tiếp tục chúng ta phải đọc thông tin về ứng dụng chúng ra đã tạo ra trên Android bước trên để cung cấp cho Google.

Mở eclipse à Window à Preferences. Copy chuỗi SHA1 fingerprint, dán vào vị trí hình , tiếp tục quay lại project MapDemo và xem tên package là gì sau đó thêm vào vào hình trên phần cách nhau dấu “;”.

image

Sau khi cung cấp chúng ta có như sau

image


Nhấn Create để tạo key cho phép sử dụng dịch vụ bản đồ từ ứng dụng của chúng ta.

image


Đến đây chúng ta đã có được key để giao tiếp với server của google sử dụng dịch vụ bản đồ.

Gán key vào ứng dụng và caaso quyền truy xuất

Mở lại android project à mở AdnroidManifest.xml và chèn thêm mã sau vào giữa thẻ Application


1 <meta-data
2 android:name="com.google.android.maps.v2.API_KEY"
3 android:value="AIzaSyC2-IEqBxmGT4iaABSVDVo-tEFF_sRY1K4"/>

Lưu tập tin lại. Việc đọc dữ liêu liệu Google Map cần phải được cấp một số quyền nhất định trên thiết bị. Tiếp tục cũng cấp mã XML sau vào AdnroidManifest.xml


1 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
2 <uses-permission android:name="android.permission.INTERNET" />
3 <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
4 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
5 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
6 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
7

Tiếp tục bổ sung vào sau thể manifest để chỉ định phiên bản của MAP API


1 <uses-feature
2 android:glEsVersion="0x00020000"
3 android:required="true"/>

Thiết kế một FragementActivity đơn giản để test bản đồ

Thiết kế layout đơn giản sau


1 <?xml version="1.0" encoding="utf-8"?>
2 <fragment xmlns:android="http://schemas.android.com/apk/res/android"
3 android:id="@+id/map"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:name="com.google.android.gms.maps.SupportMapFragment"/>

Mở tập tin MainActivity.java và tham chiếu giao diện cho layout này.

Chạy ứng dụng chúng ta sẽ có giao diện như sau

image

Thư viện C# cho phép nghe sự kiện bàn phím và chuột

 

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

 

http://code.google.com/p/klog-sharp/source/browse/trunk/Keylogger/UserActivityHook.cs?r=2

 

Khá hay

Friday, April 25, 2014

Web dự báo thời tiết kết quả XML/JSON

Một dịch vụ công cộng dự báo thời tiết khá chi tiết, một kênh tham khảo hay.

http://api.openweathermap.org/data/2.5/forecast?lat=10.0333&lon=105.78333

Kết quả trả về dưới dạng JSON

Nếu muốn XML thì theo địa chỉ bên dưới

http://api.openweathermap.org/data/2.5/forecast?q=can+tho,vn&mode=xml

Các bạn thử phân tích XML xem sao

Thư viện java phân tích JSON

1 // chuy?n chu?i JSON thành ??i t??ng ?? x? lý
2 JSONObject reader = new JSONObject(jsonString);
3 // tham chi?u t?i c?m sys (xem c?u trúc bên trên)
4 JSONObject sys = reader.getJSONObject("sys");
5 // l?y thu?c tính country c?a ??i t??ng sys
6 country.setText(sys.getString("country"));
7 // tham chi?u t?i ?o?n main
8 JSONObject main = reader.getJSONObject("main");
9 // ??c giá tr? ?? ?m
10 humidity.setText("?? ?m: "+ main.getString("humidity") + "%");
11 // hi?n th? toàn b? lên TextViev d??i cùng
12 all.setText(jsonString);
13


Cũng có thể lấy mảng các đối tượng



1 // chuy?n chu?i JSON thành ??i t??ng ?? x? lý
2 JSONObject reader = new JSONObject(jsonString);
3 JSONArray listAll = reader.getJSONArray("list");
4 for (int i = 0; i < listAll.length(); i++) {
5 tv.append(listAll.getJSONObject(i).getString("dt_txt")
6 + ": "+ listAll.getJSONObject(i).getJSONObject("main")
7 .getString("humidity") + "%\n");
8

Sunday, April 20, 2014

Chú chim nhiều màu :D

Screenshot - 20_04_14 , 13_59_44

Có ai còn nhớ chú này không các bạn. Buồn buồn nhân bản lại chơi, chơi khó hơn con chim thiệt “Flappy Bird” nhe bà con.

https://dl.dropboxusercontent.com/u/50669077/FlappyBird-android.apk

Chơi thử xem sao.

Từ up tiếp hướng dẫn chơi.

Friday, April 4, 2014

TextToSpeech

Thư viện phát âm của Android cho phép đọc văn bản với nhiều ngôn ngữ khác nhau. Để chỉ định ngôn ngữ mà thư viện sẽ đọc Android cung cấp phương thức setLanguage(Locale loc), để biết ngôn ngữ đang được đọc chúng ta gọi phương thức getLanguage (Locale loc) và muốn kiểm tra thư viện có hỗ trợ một ngôn ngữ nào đó hay không chúng ta có phương thức isLanguageAvailable (Locale loc). Ngoài ra, thư viện này còn rất nhiều thuộc tính và phương thức để điều khiển viêc đọc một đoạn ngôn ngữ (http://developer.android.com/reference/android/speech/tts/TextToSpeech.html).

Để tìm hiểu và ứng dụng TextToSpeech chúng ta cùng xây dựng một ứng dụng nhỏ cho phép đọc nội dung cung cấp qua EditText và có thể thay đổi chất giọng đọc và tốc độ đọc. Ứng dụng có giao diện như sau

Screenshot - 03_04_14 , 12_30_42 Screenshot - 03_04_14 , 12_32_19

Giao diện các bạn xem lại các bài trước (tùy biến giao diện) để thiết kế giao diện bên trên. Để có thể sử dụng thư viện này trong Activity chúng ta sẽ cài đặt interface OnInitListener và cài đặc phương thức onInit(int status) để khởi tạo thư việc.

1 @Override
2 public void onInit(int status) {
3 if (status == TextToSpeech.SUCCESS) {
4 btn.setEnabled(true);
5 } else {
6 btn.setEnabled(false);
7 }
8 // xác định chất giọng bình thường
9 tts.setPitch(1.0f);
10 // xác định tốc độ đọc bìn thường
11 tts.setSpeechRate(1.0f);
12 // chỉ định ngôn ngữ đọc là ngôn ngữ cài đặt của thiết bị
13 tts.setLanguage(Locale.getDefault());
14 }

Đối số status cho biết là có thể sử dụng thư viện TextToSpeech trên thiết bị hay không. Để đọc một một đoạn văn bản chúng ta gọi hàm tts.speak(str, TextToSpeech.QUEUE_FLUSH, null). Với Str là chuỗi cần đọc, TextToSpeech.QUEUE_FLUSH cách đọc chuỗi.

Tiếp theo, đón nhận thao tác nhấn chọn đọc để gọi hàm đọc văn bản.


1 btn.setOnClickListener(new View.OnClickListener() {
2 @Override
3 public void onClick(View v) {
4 // đọc chuỗi trên EditText
5 String str = txt.getText().toString();
6 // nếu có chuỗi để đọc
7 if (!str.equals("")) {
8 txt.setError(null);
9 tts.speak(str, TextToSpeech.QUEUE_FLUSH, null);
10 } else {
11 // hiển thị thông báo lỗi theo EditText
12 txt.setError("Nhập chữ cần đọc");
13 }
14 }
15 });

Với hàm setError của EditText chúng ta hiển thị thống báo cho người dùng nhập đoạn cần đọc như giao diện đã trình bày bên trên. Chúng ta thấy rằng tốc độ đọc và chất giọng đọc đã được khơi tạo cho đối tượng khi nó được tạo ra. Vấn đề tiếp theo là khi chọn lại thông qua 2 SeekBar chúng ta sẽ cập nhật giá trị lại cho TextToSpeech.

Đăng ký đón nhận sự kiện khi người dùng thay đổi giá trị của SeekBar để cập nhật tốc độ đọc và chất giọng.

Như vậy mỗi khi giá trị của SeekBar thay đổi thì chúng ta cập nhật ngay cho đối tượng TextToSpeech vì vậy khi gọi hàm speak từ sự kiện click của nút phát âm thì 02 giá trị tốc độ đọc và chất giọng đã có
1 tocdo.setOnTouchListener(new OnTouchListener() {
2 @Override
3 public boolean onTouch(View v, MotionEvent event) {
4 // 0.5 đến 2.0, 1.0 là tốc độ bình thường
5 tts.setSpeechRate(tocdo.getProgress() * 0.1f);
6 return false;
7 }
8 });
9 chatgiong.setOnTouchListener(new OnTouchListener() {
10 @Override
11 public boolean onTouch(View v, MotionEvent event) {
12 // giọng trầm bổng
13 tts.setPitch(chatgiong.getProgress() * 0.1f);
14 return false;
15 }
16 });

Như vậy mỗi khi giá trị của SeekBar thay đổi thì chúng ta cập nhật ngay cho đối tượng TextToSpeech vì vậy khi gọi hàm speak từ sự kiện click của nút phát âm thì 02 giá trị tốc độ đọc và chất giọng đã có.


 


Còn tiếp ….

Thursday, March 13, 2014

Chương trình đánh bài cào trên Android

Xây dựng chương trình rút 03 lá bài từ bộ bài 52 lá và đếm nút từ 03 lá bài.

Screenshot - 13_03_14 , 16_03_44

Hình 2.1 -       Thông tin project rút bài

Sau khi hoàn thành tạo Project, copy (ctrl+c) toàn bộ các hình ảnh của bộ bài và chép vào thư mục res -> drawable-hdpi. Sau khi chúng ta chép hình vào thư mục này thì hệ thống sẽ biên dịch lại và tham chiếu vào file R.java để chúng ta có thể khai thác thông quan activity.

Thiết kế giao diện như hình bên dưới.

Screenshot - 13_03_14 , 16_03_59

Hình 2.2 -       Giao diện cở bản

Kéo thả thành phần ImageView vào giao diện, hệ thống sẽ bậc giao diện chọn ảnh để hiển thị trên ImageView như hình dưới. Do đã tham chiếu ở bước trên nên chúng ta chỉ việc chọn ảnh từ hộp thoại này.

 Screenshot - 13_03_14 , 16_04_12

Hình 2.3 -       Giao diện chọn ảnh

Lặp lại tương tự cho 02 ImageView tiếp theo, ta có giao diện như sau:

Screenshot - 13_03_14 , 15_17_04

Hình 2.4 -       Giao diên cở bản của ứng dụng

Chúng ta có nội dung file XML như sau

1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools"
3 android:id="@+id/LinearLayout1"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical"
7 android:paddingBottom="@dimen/activity_vertical_margin"
8 android:paddingLeft="@dimen/activity_horizontal_margin"
9 android:paddingRight="@dimen/activity_horizontal_margin"
10 android:paddingTop="@dimen/activity_vertical_margin"
11 tools:context="vn.cusc.baicao.MainActivity$PlaceholderFragment" >
12
13 <TextView
14 android:id="@+id/tv_Chao"
15 android:layout_width="wrap_content"
16 android:layout_height="wrap_content"
17 android:text="Nh?n nút d? chia bài"
18 android:textAppearance="?android:attr/textAppearanceSmall" />
19
20 <LinearLayout
21 android:layout_width="match_parent"
22 android:layout_height="wrap_content"
23 android:orientation="horizontal" >
24
25 <Button
26 android:id="@+id/btnChiaBai"
27 android:layout_width="wrap_content"
28 android:layout_height="wrap_content"
29 android:text="Chia bài" />
30
31 <Button
32 android:id="@+id/btnXaoBai"
33 android:layout_width="wrap_content"
34 android:layout_height="wrap_content"
35 android:text="Xào bài" />
36 </LinearLayout>
37
38 <LinearLayout
39 android:layout_width="match_parent"
40 android:layout_height="wrap_content"
41 android:orientation="horizontal" >
42
43 <ImageView
44 android:id="@+id/imageView01"
45 android:layout_width="wrap_content"
46 android:layout_height="wrap_content"
47 android:src="@drawable/b2fv" />
48
49 <ImageView
50 android:id="@+id/imageView02"
51 android:layout_width="wrap_content"
52 android:layout_height="wrap_content"
53 android:src="@drawable/b2fv" />
54
55 <ImageView
56 android:id="@+id/imageView03"
57 android:layout_width="wrap_content"
58 android:layout_height="wrap_content"
59 android:src="@drawable/b2fv" />
60 </LinearLayout>
61
62 </LinearLayout>

Tới đây chúng ta tiếp tục xử lý khi người dùng chọn (nhấn chuột hay chạm) vào nút nhấn thì tiến hành chọn ngẫu nhiên 03 lá bài trong 52 lá bài và tính xem được bao nhiêu nút.


Bước 1.          Định nghĩa lớp tên LaBai  có cấu trúc như sau



1 public class LaBai {
2 int SoNut;
3 String Ten;
4 int Hinh;
5 LaBai(int nut, String ten, int hinh)
6 {
7 SoNut = nut;
8 Ten = ten;
9 Hinh = hinh;
10 }
11 }
Bước 2.          Khai báo một số biến tham chiếu và quản lý bộ bài như sau (Khai báo trong lớp Activity)
1 Button btnChia, btnXao;
2 ImageView LaBai[] = new ImageView[3];
3 TextView kq;
4 // chua cac la da rut;
5 ArrayList<LaBai> CacLaDaRut = new ArrayList<LaBai>();
6 ArrayList<LaBai> CacLaBai = new ArrayList<LaBai>();// ds cac la bai;


Định nghĩa phương thức tên là xaoBai để khởi tạo lại bộ bài.

1 void xaoBai() {
2 // Khai báo 52 lá bài;
3 CacLaBai.add(new LaBai(1, "Ách Chu?ng", R.drawable.c1));
4 CacLaBai.add(new LaBai(1, "Ách Rô", R.drawable.d1));
5 CacLaBai.add(new LaBai(1, "Ách Co", R.drawable.h1));
6 CacLaBai.add(new LaBai(1, "Ách Bích", R.drawable.s1));
7
8 CacLaBai.add(new LaBai(2, "Hai Chu?ng", R.drawable.c2));
9 CacLaBai.add(new LaBai(2, "Hai Rô", R.drawable.d2));
10 CacLaBai.add(new LaBai(2, "Hai Co", R.drawable.h2));
11 CacLaBai.add(new LaBai(2, "Hai Bích", R.drawable.s2));
12
13 CacLaBai.add(new LaBai(3, "Ba Chu?ng", R.drawable.c3));
14 CacLaBai.add(new LaBai(3, "Ba Rô", R.drawable.d3));
15 CacLaBai.add(new LaBai(3, "Ba Co", R.drawable.h3));
16 CacLaBai.add(new LaBai(3, "Ba Bích", R.drawable.s3));
17
18 CacLaBai.add(new LaBai(4, "B?n Chu?ng", R.drawable.c4));
19 CacLaBai.add(new LaBai(4, "B?n Rô", R.drawable.d4));
20 CacLaBai.add(new LaBai(4, "B?n Co", R.drawable.h4));
21 CacLaBai.add(new LaBai(4, "B?n Bích", R.drawable.s4));
22
23 CacLaBai.add(new LaBai(5, "Nam Chu?ng", R.drawable.c5));
24 CacLaBai.add(new LaBai(5, "Nam Rô", R.drawable.d5));
25 CacLaBai.add(new LaBai(5, "Nam Co", R.drawable.h5));
26 CacLaBai.add(new LaBai(5, "Nam Bích", R.drawable.s5));
27
28 CacLaBai.add(new LaBai(6, "Sáu Chu?ng", R.drawable.c6));
29 CacLaBai.add(new LaBai(6, "Sáu Rô", R.drawable.d6));
30 CacLaBai.add(new LaBai(6, "Sáu Co", R.drawable.h6));
31 CacLaBai.add(new LaBai(6, "Sáu Bích", R.drawable.s6));
32
33 CacLaBai.add(new LaBai(7, "B?y Chu?ng", R.drawable.c7));
34 CacLaBai.add(new LaBai(7, "B?y Rô", R.drawable.d7));
35 CacLaBai.add(new LaBai(7, "B?y Co", R.drawable.h7));
36 CacLaBai.add(new LaBai(7, "B?y Bích", R.drawable.s7));
37
38 CacLaBai.add(new LaBai(8, "Tám Chu?ng", R.drawable.c8));
39 CacLaBai.add(new LaBai(8, "Tám Rô", R.drawable.d8));
40 CacLaBai.add(new LaBai(8, "Tám Co", R.drawable.h8));
41 CacLaBai.add(new LaBai(8, "Tám Bích", R.drawable.s8));
42
43 CacLaBai.add(new LaBai(9, "Chín Chu?ng", R.drawable.c9));
44 CacLaBai.add(new LaBai(9, "Chín Rô", R.drawable.d9));
45 CacLaBai.add(new LaBai(9, "Chín Co", R.drawable.h9));
46 CacLaBai.add(new LaBai(9, "Chín Bích", R.drawable.s9));
47
48 CacLaBai.add(new LaBai(10, "Mu?i Chu?ng", R.drawable.c10));
49 CacLaBai.add(new LaBai(10, "Mu?i Rô", R.drawable.d10));
50 CacLaBai.add(new LaBai(10, "Mu?i Co", R.drawable.h10));
51 CacLaBai.add(new LaBai(10, "Mu?i Bích", R.drawable.s10));
52
53 CacLaBai.add(new LaBai(11, "B?i Chu?ng", R.drawable.cj));
54 CacLaBai.add(new LaBai(11, "B?i Rô", R.drawable.dj));
55 CacLaBai.add(new LaBai(11, "B?i Co", R.drawable.hj));
56 CacLaBai.add(new LaBai(11, "B?i Bích", R.drawable.sj));
57
58 CacLaBai.add(new LaBai(12, "Ð?m Chu?ng", R.drawable.cq));
59 CacLaBai.add(new LaBai(12, "Ð?m Rô", R.drawable.dq));
60 CacLaBai.add(new LaBai(12, "Ð?m Co", R.drawable.hq));
61 CacLaBai.add(new LaBai(12, "Ð?m Bích", R.drawable.sq));
62
63 CacLaBai.add(new LaBai(13, "Già Chu?ng", R.drawable.ck));
64 CacLaBai.add(new LaBai(13, "Già Rô", R.drawable.dk));
65 CacLaBai.add(new LaBai(13, "Già Co", R.drawable.hk));
66 CacLaBai.add(new LaBai(13, "Già Bích", R.drawable.sk));
67 }


Hiệu chỉnh phương thức onCreate

1 @Override
2 protected void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.fragment_main);
5 // tham chi?u các d?i tu?ng
6 btnChia = (Button) findViewById(R.id.btnChiaBai);
7 btnXao = (Button) findViewById(R.id.btnXaoBai);
8 kq = (TextView) findViewById(R.id.tv_Chao);
9 LaBai[0] = (ImageView) findViewById(R.id.imageView01);
10 LaBai[1] = (ImageView) findViewById(R.id.imageView02);
11 LaBai[2] = (ImageView) findViewById(R.id.imageView03);
12 // kh?i t?o l?i bài m?i
13 xaoBai();
14
15 btnXao.setOnClickListener(new View.OnClickListener() {
16 @Override
17 public void onClick(View v) {
18 // TODO Auto-generated method stub
19 xaoBai();
20 LaBai[0].setImageResource(R.drawable.b2fv);
21 LaBai[1].setImageResource(R.drawable.b2fv);
22 LaBai[2].setImageResource(R.drawable.b2fv);
23 kq.setText("Ch?n chia bài d? choi!");
24 CacLaDaRut.clear();
25 }
26 });
27
28 btnChia.setOnClickListener(new View.OnClickListener() {
29 @Override
30 public void onClick(View v) {
31 // TODO Auto-generated method stub
32 int SoNut = 0;// de xet xem duoc may nut
33 boolean BaTay = true;// de xet truong hop 3 tay
34 String TenCaLaBai = "Ban rút du?c:\n";
35 // h?t bài không choi n?a
36 if (CacLaBai.size() < 3)
37 {
38 kq.setText("H?t bài !\nCh?n xào bài d? choi l?i !");
39 return;
40 }
41 // rút ba lá bài
42 Random ran = new Random();
43 int lan1 = ran.nextInt(CacLaBai.size() - 1);
44 CacLaDaRut.add(CacLaBai.get(lan1));
45 CacLaBai.remove(lan1);
46
47 int lan2 = ran.nextInt(CacLaBai.size() - 1);
48 CacLaDaRut.add(CacLaBai.get(lan2));
49 CacLaBai.remove(lan2);
50
51 int lan3 = ran.nextInt(CacLaBai.size() - 1);
52 CacLaDaRut.add(CacLaBai.get(lan3));
53 CacLaBai.remove(lan3);
54
55 LaBai xetbai;
56 // Tính nút
57 for (int i = 0; i < CacLaDaRut.size(); i++) {
58 xetbai = CacLaDaRut.get(i);
59 if (xetbai.SoNut <= 10)
60 BaTay = false;
61
62 SoNut += xetbai.SoNut > 10 ? 0 : xetbai.SoNut;
63
64 LaBai[i].setImageResource(xetbai.Hinh);
65 TenCaLaBai += xetbai.Ten + "\n";
66 }
67 TenCaLaBai += "Ðu?c " + (SoNut % 10) + " nút !";
68 TenCaLaBai = BaTay ? "B?n rút du?c ba tây !" : TenCaLaBai;
69 kq.setText(TenCaLaBai);
70 CacLaDaRut.clear();
71 }
72 });
73 }


Bước 3.          Bây giờ biên dịch và chạy


 Screenshot - 13_03_14 , 15_21_14


Hình 2.5 -       Giao diện trò chơi


Nhấn vào chia bài


Screenshot - 13_03_14 , 15_25_07


Hình 2.6 -       Giao diện sau khi chia bài


Trò chơi cho phép rút (chia bài) cho đến khi hết 52 lá bài hoặc có thể xào bài lại bằng cách chọn vào Xào bài.


Thử xem sao  nhe !


Bài tiếp theo chúng ta sẽ tùy biến tiếp giao diện cũng như tinh năng của bài này.

Translate