Android – Đồ họa

2/5 - (2 votes)

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ả.

Screenshot_2016-05-25-08-34-58

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.

Screenshot_2016-05-25-08-54-41

0 0 votes
Article Rating
Subscribe
Thông báo cho tôi qua email khi
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments