2015-06-30 195 views
18

我想要一個RecyclerView,其中有垂直滾動的項目列表。 從這個可滾動的項目列表中,有些應該有水平滾動的能力。 如下圖所示圖片 enter image description here水平滾動列的垂直滾動列表的回收站視圖

任何人都可以請指導我如何做到這一點?

謝謝。

+0

因爲沒有方法來添加腳註到recyclerview ...你可以創建水平滾動型項目並在適配器中充氣,使其看起來像一個頁腳。 – user765

回答

5

自定義佈局管理

  • StaticGridLayoutManager - 具有可變柱2D網格滾動計數基於數據集。可見(未回收)視圖的窗口是靜態確定的
  • DynamicGridLayoutManager - 2D滾動網格,其中動態確定可見視圖的窗口。 內存中的瀏覽次數更少,但滾動性能還是有問題的。

我遇到了同樣的問題,我找到了這個庫。也許它會幫助你。約RecyclerView佈局管理 https://github.com/devunwired/recyclerview-playground

更多細節:http://wiresareobsolete.com/2014/09/building-a-recyclerview-layoutmanager-part-1/

P/S:對於你的情況http://lucasr.org/2014/07/31/the-new-twowayview/

+0

問題是,lucasr的雙向視圖沒有任何示例或教程......但也許我們應該繼續嘗試爲自己 –

-1

因爲這似乎是一個常見的問題,我想我會分享我的簡單實現這個。使用RecyclerView來實現這一點很容易。在嘗試使用設備相機拍攝照片時創建可滾動圖像的水平列表時,我這樣做了。我粘貼了適配器的相關部分。

我使用了一個RecyclerView,它使用了一個LinearLayoutManager,其方向設置爲水平。

適配器本身是很簡單,(請注意只有相關部分在此):

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

這不回答op –

+0

問的問題它爲他提供了一個藍圖爲解決方案。 OP要求一個指導,這正是我所做的。請批判性地分析這個問題。 – ucsunil

+0

該操作詢問將包含垂直項目和這些項目的某些行的回收視圖將具有多個項目,如圖所示。您的解決方案僅涵蓋垂直或水平顯示項目的第一部分。它不包括他所問的內容。請再次看到問題 –