Vì đây dường như là một vấn đề thường gặp, tôi nghĩ rằng tôi sẽ chia sẻ thực hiện đơn giản của anh này . Nó là khá dễ dàng để đạt được điều này bằng cách sử dụng một RecyclerView. Tôi đã làm điều này trong khi cố gắng tạo một danh sách ngang các hình ảnh có thể cuộn khi một bức ảnh được chụp bằng camera của thiết bị. Tôi đã dán phần có liên quan của bộ điều hợp.
Tôi đã sử dụng RecyclerView sử dụng LinearLayoutManager với hướng được đặt thành ngang.
Các bộ chuyển đổi chính nó là khá đơn giản và là (xin lưu ý chỉ bộ phận liên quan đang ở đây):
import android.content.Context;
import android.graphics.Bitmap;
import android.media.Image;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.ebay.lockers.R;
import com.ebay.lockers.utils.AsyncDrawable;
import com.ebay.lockers.utils.BitmapUtils;
import com.ebay.lockers.utils.BitmapWorkerTask;
import java.io.File;
import java.util.List;
/**
* Created by Sunil on 6/17/2016.
*/
public class ImagesHorizontalListAdapter extends RecyclerView.Adapter<ImagesHorizontalListAdapter.ImagesViewHolder> {
private Context context;
private List<File> imageFiles;
public ImagesHorizontalListAdapter(Context context, List<File> imageFiles) {
this.context = context;
this.imageFiles = imageFiles;
}
@Override
public ImagesHorizontalListAdapter.ImagesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View layout = LayoutInflater.from(context).inflate(R.layout.simple_image_view, parent, false);
ImagesViewHolder viewHolder = new ImagesViewHolder(layout);
return viewHolder;
}
@Override
public void onBindViewHolder(final ImagesHorizontalListAdapter.ImagesViewHolder holder, final int position) {
int availableWidth = context.getResources().getDisplayMetrics().widthPixels;
int imageWidth = availableWidth/4; // Number of images to be shown by default
int imageHeight = imageWidth*4/3;
final int minDimenForScaling = Math.min(imageWidth, imageHeight);
holder.image.post(new Runnable() {
@Override
public void run() {
loadBitmap(imageFiles.get(position), holder.image, minDimenForScaling, minDimenForScaling);
}
});
}
@Override
public int getItemCount() {
return imageFiles.size();
}
public void loadBitmap(File file, ImageView imageView, int reqWidth, int reqHeight) {
if(BitmapUtils.cancelPotentialWork(file, imageView)) {
final BitmapWorkerTask task = new BitmapWorkerTask(imageView, reqWidth, reqHeight);
// The second Bitmap parameter is a placeholder image
// Should consider animation; TO DO --
final AsyncDrawable asyncDrawable = new AsyncDrawable(context.getResources(), null, task);
imageView.setImageDrawable(asyncDrawable);
task.execute(file);
}
}
public static class ImagesViewHolder extends RecyclerView.ViewHolder {
// each data item is an image
ImageView image;
public ImagesViewHolder(View layout) {
super(layout);
this.image = (ImageView) layout.findViewById(R.id.image);
}
}
}
Bởi vì không có phương pháp để thêm chân đến recyclerview ... bạn có thể tạo một mục với scrollview ngang và thổi phồng nó trong bộ chuyển đổi để làm cho nó trông giống như một chân trang. – user765