Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

[Hướng dẫn] Level List trong Android

Discussion in 'Hướng dẫn lập trình Android' started by hoithegiantinhlagi, 15/7/13.

  1. hoithegiantinhlagi

    hoithegiantinhlagi Active Member

    Hôm nay đầu tuần nên "sung sức" viết tiếp một bài TUT cho mọi người cùng thảo luận.
    Lần trước viết bài Intent chưa có kinh nghiệm nên hướng dẫn chưa kỹ càng, hôm nay sẽ viết thật tỉ mỉ để các bạn newbie có thể hiểu được.
    1/ Khái niệm: Level List là một drawable dùng để quản lý số lượng các drawable được lựa chọn.
    Đó là cách hiểu của mình còn các bạn muốn chính xác thì đây: http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
    2/ Cách dùng:
    Để dùng được Level List thì bạn phải tạo một file abc.xml và save vào res/drawable/abc.xml.
    Tham chiếu tài nguyên:
    + Trong Java: R.drawable.abc.
    + Trong XML: @[tên package:]drawable/abc.
    Cú pháp khai báo:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <level-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:maxLevel= "1"    android:drawable="@drawable/gallery_photo_1"/>
        <item android:maxLevel= "2"    android:drawable="@drawable/gallery_photo_2"/>
        <item android:maxLevel= "3"    android:drawable="@drawable/gallery_photo_3"/>
        <item android:maxLevel= "4"    android:drawable="@drawable/gallery_photo_4"/>
        <item android:maxLevel= "5"    android:drawable="@drawable/gallery_photo_5"/>
        <item android:maxLevel= "6"    android:drawable="@drawable/gallery_photo_6"/>
        <item android:maxLevel= "7"    android:drawable="@drawable/gallery_photo_7"/>
        <item android:maxLevel= "8"    android:drawable="@drawable/gallery_photo_8"/>
    </level-list>
    Trong đó android:maxLevel dùng để chỉ định cấp bậc tối đa cho 1 bức ảnh nào đó.
    Tương tự đối với android:minLevel có ý nghĩa ngược lại.
    Còn android:Drawable dùng để tham chiếu đến tài nguyên drawable để sử dụng cho frame.
    3/ Ví dụ: Ở vd này mình sẽ demo 1 app cso chức năng tự động chuyển hình với kho ảnh được set cứng, còn về việc chọn ảnh để chuyển mình sẽ giới thiệu với các bạn vào chương trình lần sau. =))
    B1: Như đã nói để sử dụng ta caaffn tạo 1 file XML, ở đây mình tạo file tên level_list.xml có nội dung như sau:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <level-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:maxLevel= "1"    android:drawable="@drawable/gallery_photo_1"/>
        <item android:maxLevel= "2"    android:drawable="@drawable/gallery_photo_2"/>
        <item android:maxLevel= "3"    android:drawable="@drawable/gallery_photo_3"/>
        <item android:maxLevel= "4"    android:drawable="@drawable/gallery_photo_4"/>
        <item android:maxLevel= "5"    android:drawable="@drawable/gallery_photo_5"/>
        <item android:maxLevel= "6"    android:drawable="@drawable/gallery_photo_6"/>
        <item android:maxLevel= "7"    android:drawable="@drawable/gallery_photo_7"/>
        <item android:maxLevel= "8"    android:drawable="@drawable/gallery_photo_8"/>
    
    </level-list>
    Sau đó vào layout chính tạo một imageview như sau:
    Code:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".FirstActivity" >
    
        <ImageView
            android:id="@+id/img"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:src="@drawable/level_list" />
    
    </LinearLayout>
    B2: Bây giờ đến phần xử lý thông tin trong Java, vào activity main code như sau:
    Code:
    package dngb.btvn.chuyenhinh;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.widget.ImageView;
    
    public class FirstActivity extends Activity {
        int i=1;
        ImageView v;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_first);
            v= (ImageView) findViewById(R.id.img);
            int delay = 3000, period =3000;
            Timer t= new Timer();
            //Đây là method xử lý thay đổi hình.
            final Handler mess = new Handler(){
                public void handleMessage(Message msg){
                    super.handleMessage(msg);
                    if(msg.what==0){
                        if(i<8){
                            i++; v.setImageLevel(i);
                        }
                        else{
                            i=1;
                            v.setImageLevel(i);
                        }
                    }
                }
            };
            t.scheduleAtFixedRate(new TimerTask() {
    
                @Override
                public void run() {
                    mess.sendEmptyMessage(0);
                }
            }, delay, period);
        }
    
    }
    
    Do trình độ hạn hẹp nên mình chỉ có thể giải thích một vài chi tiết như sau:
    Timer mình dùng để lên lịch trình cho một công việc định kỳ.
    Handler dùng để gửi và xử lý message(dùng để chứa các mô tả và dữ liệu về 1 đối tượng tùy ý).
    Phương thức scheduleAtFixedRateb(TimerTask task, long delay, long period) dùng để sắp xếp lịch trình cho một công việc được đi lặp lại sau một khoảng thời gian delay cụ thể đã được thiết lập.

    Tất cả giải thích trên là theo cách hiểu và khả năng dịch english "tuyệt vời" =)) của mình nên có gì các bạn thấy khó hiểu thì hãy thông cảm và lên trang developer android để tham khảo thêm nha.
    Xong hết rồi giờ chỉ còn build lên và xem kết quả thôi.
    Cảm ơn mọi người đã quan tâm theo dõi.
     
    tranhuyvc likes this.

Chia sẻ trang này

Loading...