Android cũng hỗ trợ các thư viện cho phép vẽ các đối tượng đồ họa 2D lên màn hình.
Để vẽ thì chúng ta gọi các phương thức vẽ bên trong phương thức onDraw()
của lớp android.view.View,
mỗi đối tượng View
có một đối tượng Canvas
của riêng nó để vẽ các đối tượng hình học như hình tròn, hình vuông, điểm… hoặc chúng ta có thể định nghĩa “cứng” ngay trong một file XML.
Ví dụ 1
Chúng ta sẽ vẽ hình tròn trên một đối tượng View,
ở đây hình tròn sẽ được định nghĩa bên trong một file XML.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#666666"/> <size android:width="70dp" android:height="70dp"/> </shape>
Chúng ta tạo một file có tên circle.xml
và bên trong một thư mục drawable
nào đó, chẳng hạn như thư mục drawable-hdpi.
Trong file này chúng ta khai báo một thẻ shape,
thẻ này sẽ định nghĩa một đối tượng hình học nào đó như hình tròn, hình vuông… chúng ta thiết lập đối tượng hình học đó trong thuộc tính android:shape,
ở đây giá trị oval tức là vẽ hình tròn, ngoài ra còn 3 loại nữa là rectangle (hình chữ nhật), line (đường thẳng) và ring (hình vòng bánh xe). Thẻ solid
quy định màu vẽ, thẻ size
quy định kích thước của đối tượng hình học.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <View android:layout_width="100dp" android:layout_height="100dp" android:layout_marginTop="5dp" android:background="@drawable/oval"/> </LinearLayout>
Trong file main.xml.
Chúng ta khai báo một thẻ View
và định nghĩa thuộc tính android:background
là tên file circle.xml,
Android sẽ tự động tìm file này trong tất cả các thư mục drawable
của nó.
package com.phocode; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
Trong file Activity
chúng ta không cần chỉnh sửa gì cả.
Ví dụ 2
Trong ví dụ này chúng ta sẽ vẽ hình chữ nhật trên một lớp View.
Công đoạn vẽ sẽ được thực hiện trong phương thức onDraw()
của lớp View
chứ không được định nghĩa trước trong file XML nữa.
package com.phocode; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class Graphics extends View { Paint p = new Paint(); public Graphics(Context context) { super(context); p.setColor(Color.GREEN); } @Override public void onDraw(Canvas canvas) { canvas.drawRect(30, 30, 100, 100, p); } }
Đầu tiên chúng ta định nghĩa lớp Graphics
kế thừa từ lớp View.
File Graphics.java
nằm cùng thư mục với file Activity.
Paint p = new Paint();
Trong lớp này chúng ta định nghĩa một đối tượng Paint.
Đối tượng này sẽ định nghĩa màu vẽ.
p.setColor(Color.GREEN);
Dòng code trên sẽ chuyển màu dùng để vẽ của đối tượng Paint
sang màu xanh lá.
@Override public void onDraw(Canvas canvas) { canvas.drawRect(30, 30, 100, 100, p); }
Các phương thức vẽ được gọi trong phương thức onDraw().
Ở đây phương thức drawRect()
sẽ vẽ một hình chữ vuông lên bề mặt của đối tượng View.
package com.phocode; import android.app.Activity; import android.os.Bundle; import android.graphics.Color; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Graphics view = new Graphics(this); view.setBackgroundColor(Color.WHITE); setContentView(view); } }
Trong file MainActivity.java,
chúng ta tạo một đối tượng View
riêng (bằng lớp Graphics)
rồi truyền vào phương thức setContentView()
chứ không phải là một file layout nào khác.
view.setBackgroundColor(Color.WHITE);
Phương thức setBackgroundColor()
sẽ thiết lập màu nền cho đối tượng View.