2015-06-30 19 views
18

Tôi muốn có một RecyclerView trong đó chúng tôi có danh sách các mục có thể cuộn dọc. Từ danh sách các mục có thể cuộn này, một số mục sẽ có khả năng cuộn theo chiều ngang. Như được hiển thị bên dưới hình ảnh enter image description hereChế độ xem lại của danh sách cuộn dọc với hàng cuộn ngang

bất kỳ ai cũng có thể hướng dẫn tôi cách thực hiện không?

Cảm ơn bạn.

+0

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

Trả lời

5

Tuỳ chỉnh LayoutManagers

  • StaticGridLayoutManager - 2D di chuyển lưới với cột biến đếm dựa trên tập dữ liệu. Cửa sổ chế độ xem có thể nhìn thấy (không tái chế) là
    được xác định tĩnh.
  • DynamicGridLayoutManager - Lưới cuộn 2D nơi cửa sổ của các chế độ xem hiển thị được xác định động. Kết quả trong ít lượt xem hơn trong bộ nhớ , nhưng hiệu suất cuộn là vấn đề.

Tôi đã gặp vấn đề tương tự và tôi đã tìm thấy thư viện này. Có thể nó sẽ giúp được bạn. chi tiết https://github.com/devunwired/recyclerview-playground

Thông tin thêm về RecyclerView LayoutManager: http://wiresareobsolete.com/2014/09/building-a-recyclerview-layoutmanager-part-1/

p/s: Đối với trường hợp của bạn http://lucasr.org/2014/07/31/the-new-twowayview/

+0

Vấn đề là, cách nhìn hai chiều từ lucasr, không có ví dụ hoặc hướng dẫn ... Nhưng có lẽ chúng ta nên tiếp tục và thử cho chính mình –

-1

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); 
     } 
    } 
} 
+0

Điều này không trả lời câu hỏi được hỏi bởi op –

+0

Nó cung cấp cho anh ta một bản in màu xanh cho giải pháp. OP yêu cầu một hướng dẫn chính xác là những gì tôi đã làm. Hãy phân tích câu hỏi một cách nghiêm túc. – ucsunil

+0

Các op hỏi về một recyclerview mà sẽ chứa các mục theo chiều dọc và của những mục một số hàng sẽ có nhiều mục như thể hiện trong hình ảnh. Giải pháp của bạn chỉ bao gồm phần đầu tiên hiển thị các mục theo chiều dọc hoặc chiều ngang. Nó không bao gồm những gì anh ta hỏi. Vui lòng xem lại câu hỏi –

Các vấn đề liên quan