Подтвердить что ты не робот

Вид ресайклера вертикального списка прокрутки с горизонтальной прокручиваемой строкой

Я хочу RecyclerView, в котором у нас есть вертикальный прокручиваемый список элементов. Из этого прокручиваемого списка элементов некоторые должны иметь возможность прокрутки в горизонтальном направлении. Как показано ниже enter image description here

Кто-нибудь может мне посоветовать, как это сделать?

Спасибо.

4b9b3361

Ответ 1

Custom LayoutManagers

  • StaticGridLayoutManager - 2D-сетка прокрутки с переменным числом столбцов на основе набора данных. Окно видимых (невозвращенных) видов - определяется статически.
  • DynamicGridLayoutManager - 2D-сетка прокрутки, где динамическое отображение окна видимых видов. Результаты меньше просмотров в памяти, но производительность прокрутки сомнительна.

Я столкнулся с той же проблемой, и я нашел эту библиотеку. Может быть, это поможет вам. https://github.com/devunwired/recyclerview-playground

Подробнее о RecyclerView LayoutManager: http://wiresareobsolete.com/2014/09/building-a-recyclerview-layoutmanager-part-1/

p/s: для вашего случая http://lucasr.org/2014/07/31/the-new-twowayview/

Ответ 2

Так как это, кажется, часто заданная проблема, я думал, что поделюсь своей простой реализацией этого. Этого довольно легко добиться, используя 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);
        }
    }
}