Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有水平滚动行的垂直滚动列表的回收器视图_Android_Android Layout_Android Recyclerview - Fatal编程技术网

Android 具有水平滚动行的垂直滚动列表的回收器视图

Android 具有水平滚动行的垂直滚动列表的回收器视图,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,我想要一个RecyclerView,其中我们有垂直滚动的项目列表。 从这个可滚动的项目列表中,有些项目应该能够水平滚动。 如下图所示 谁能指导我怎么做 多谢各位 自定义布局管理器 StaticGridLayoutManager-基于数据集具有可变列计数的二维滚动网格。可见(非循环)视图窗口为 静态确定的 DynamicGridLayoutManager-动态确定可见视图窗口的二维滚动网格。结果在中的视图更少 内存,但滚动性能有问题 我遇到了同样的问题,我找到了这个图书馆。也许对你有帮助。

我想要一个RecyclerView,其中我们有垂直滚动的项目列表。 从这个可滚动的项目列表中,有些项目应该能够水平滚动。 如下图所示

谁能指导我怎么做

多谢各位

自定义布局管理器

  • StaticGridLayoutManager-基于数据集具有可变列计数的二维滚动网格。可见(非循环)视图窗口为
    静态确定的
  • DynamicGridLayoutManager-动态确定可见视图窗口的二维滚动网格。结果在中的视图更少 内存,但滚动性能有问题
我遇到了同样的问题,我找到了这个图书馆。也许对你有帮助。

有关RecyclerView LayoutManager的更多详细信息:


p/s:对于您的案例

由于这似乎是一个常见的问题,我想我将分享我的简单实现。使用RecyclerView很容易实现这一点。我这样做的同时,试图创建一个水平列表的滚动图像时,一张照片是使用设备相机拍摄的。我已经粘贴了适配器的相关部分

我使用了一个RecyclerView,它使用了一个方向设置为水平的LinearLayoutManager

适配器本身非常简单,如下所示(请注意,此处仅列出相关部分):

导入android.content.Context;
导入android.graphics.Bitmap;
导入android.media.Image;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入com.ebay.lockers.R;
导入com.ebay.lockers.utils.AsyncDrawable;
导入com.ebay.lockers.utils.BitmapUtils;
导入com.ebay.lockers.utils.BitmapWorkerTask;
导入java.io.File;
导入java.util.List;
/**
*Sunil于2016年6月17日创建。
*/
公共类ImagesHorizontalListAdapter扩展了RecyclerView.Adapter{
私人语境;
私人文件清单;
公共图像Shorizontallistadapter(上下文上下文,列表图像文件){
this.context=上下文;
this.imageFiles=imageFiles;
}
@凌驾
public ImagesHorizontalListAdapter.ImagesViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图布局=布局更平坦。从(上下文)。充气(R.layout.simple\u image\u视图,父视图,false);
IMAGESVIEWORLDEVIEWHOLDER=新的IMAGESVIEWORLDER(布局);
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(最终图像Shorizontallistadapter.ImagesViewHolder,最终int位置){
int availableWidth=context.getResources().getDisplayMetrics().widthPixels;
int imageWidth=availableWidth/4;//默认情况下显示的图像数
int imageHeight=图像宽度*4/3;
最终int minDimenForScaling=Math.min(图像宽度、图像高度);
holder.image.post(新的Runnable(){
@凌驾
公开募捐{
加载位图(imageFiles.get(位置)、holder.image、minDimenForScaling、minDimenForScaling);
}
});
}
@凌驾
public int getItemCount(){
返回imageFiles.size();
}
公共void加载位图(文件文件、ImageView ImageView、int-reqWidth、int-reqHeight){
if(BitmapUtils.cancelPotentialWork(文件,图像视图)){
最终BitmapWorkerTask任务=新的BitmapWorkerTask(imageView、reqWidth、reqHeight);
//第二个位图参数是占位符图像
/应该考虑动画;
final AsyncDrawable AsyncDrawable=new AsyncDrawable(context.getResources(),null,task);
setImageDrawable(asyncDrawable);
任务执行(文件);
}
}
公共静态类ImagesViewHolder扩展了RecyclerView.ViewHolder{
//每个数据项都是一个图像
图像视图图像;
公共图像文件夹(视图布局){
超级(布局);
this.image=(ImageView)layout.findviewbyd(R.id.image);
}
}
}

因为没有方法将页脚添加到recyclerview…您可以使用水平滚动视图创建一个项目,并在适配器中将其充气,使其看起来像页脚。问题是,lucasr的双向视图没有示例或教程。。。但也许我们应该继续努力,为自己而努力。这并没有回答opIt提出的问题。它为他提供了解决方案的蓝图。OP要求提供一份指南,这正是我所做的。请批判性地分析这个问题。op询问了一个recyclerview,它将垂直包含项目,其中一些行将包含多个项目,如图所示。您的解决方案仅涵盖垂直或水平显示项目的第一部分。这不包括他问的问题。请再看一遍这个问题
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);
        }
    }
}