Android thư viện ảnh đơn giản cho người mới, sử dụng PlaceHolderView

Giới thiệu

Ví dụ này thể hiện việc tạo một danh sách các hình ảnh với animation bằng PlaceHolderView. Trong ví dụ này, mình sẽ để những file ảnh vào thư viện drawable.

Bước 1:

Tạo project trong Android Studio và thêm dependency vào file gradle của app.

dependencies {
    compile 'com.mindorks:placeholderview:0.2.7'
}

Bước 2:

Tạo file activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <com.mindorks.placeholderview.PlaceHolderView
        android:id="@+id/galleryView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical"/>
</LinearLayout>

Bước 3:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="225dp"
        android:scaleType="centerCrop"
        android:src="@drawable/img_1"/>
</LinearLayout>

Bước 4:

Tạo class GalleryItem.class

@Animate(Animation.CARD_LEFT_IN_DESC)
@NonReusable
@Layout(R.layout.gallery_item)
public class GalleryItem {

    @View(R.id.imageView)
    private ImageView imageView;

    private Drawable mDrawable;

    public GalleryItem(Drawable drawable) {
        mDrawable = drawable;
    }

    @Resolve
    private void onResolved() {
        imageView.setImageDrawable(mDrawable);
    }
}

Ghi chú

1. @NonReusable là một annotation trong PlaceHolderView, được sử dụng trong trường hợp chúng ta muốn release tất cả các tài nguyên và tham chiếu nếu bị xóa khỏi danh sách và không được sử dụng cùng một object trong phương thức addView () của PlaceHolderView.
2. @layout là annotation được sử dụng để bind layout với class này.
3. @View được sử dụng để bind các view trong layout.
4. @Resolve được sử dụng để vận hành trên các reference từ @View, nói ngắn gọn nếu chúng ta muốn xác định bất kỳ thao tác nào trên view thì nên đặt trong một phương thức và thêm annotation @Resolve.
5. @Animate () được sử dụng để định nghĩa các animations được xác định trong lớp Animation.

Bước 5:

Tạo file MainActivity.class. Nhận reference đến PlaceHolderView và sau đó add views cho phương thức này bằng cách sử dụng method addView.

public class MainActivity extends AppCompatActivity {

    private PlaceHolderView mGalleryView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mGalleryView = (PlaceHolderView)findViewById(R.id.galleryView);
        mGalleryView
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_1)))
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_2)))
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_3)))
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_4)))
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_5)))
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_6)))
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_7)))
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_8)))
                .addView(new GalleryItem(getResources().getDrawable(R.drawable.img_9)));
    }
}

Ghi chú:

Nếu bạn muốn list ảnh hiện lên theo gridview, bản có thể dùng câu lệnh như sau:

mGalleryView.getBuilder().setLayoutManager(new GridLayoutManager(this.getApplicationContext(), 2));

Vừa rồi là phần hướng dẫn sử dụng thư viện PlaceHolderView cho người mới bắt đầu.

Tài liệu tham khảo: https://blog.mindorks.com/android-beginner-image-gallery-example