Azoft / CarouselLayoutManager

Android Carousel LayoutManager for RecyclerView
Apache License 2.0
2.56k stars 367 forks source link

can't display image with using <androidx.recyclerview.widget.RecyclerView> #118

Closed isarYMB closed 3 years ago

isarYMB commented 3 years ago

my xml cant display my image if i using for CarouselLayout Manager with using Glide library

my project https://github.com/isarYMB/MyApp/tree/master

please, i have to fix the problem

CarouselPreviewActivity.java

package com.mig35.carousellayoutmanager.sample;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.mig35.carousellayoutmanager.CarouselLayoutManager;
import com.mig35.carousellayoutmanager.CarouselZoomPostLayoutListener;
import com.mig35.carousellayoutmanager.CenterScrollListener;
import com.mig35.carousellayoutmanager.DefaultChildSelectionListener;
import com.mig35.carousellayoutmanager.sample.databinding.ActivityCarouselPreviewBinding;
import com.mig35.carousellayoutmanager.sample.databinding.ItemViewBinding;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Random;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;

public class CarouselPreviewActivity extends AppCompatActivity {

    private ArrayList<Integer> images;
    private GalleryAdapter adapter;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_carousel_preview);

        final ActivityCarouselPreviewBinding binding = ActivityCarouselPreviewBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        adapter = new GalleryAdapter(getApplicationContext(), images);

        images = new ArrayList<>();

        images.add(R.drawable.ic_baseline_4k_24);

        // create layout manager with needed params: vertical, cycle
        initRecyclerView(binding.listHorizontal, new CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL, true), adapter);

    }

    private void initRecyclerView(final RecyclerView recyclerView, final CarouselLayoutManager layoutManager, final GalleryAdapter adapter) {
        // enable zoom effect. this line can be customized
        //layoutManager.setPostLayoutListener(new CarouselZoomPostLayoutListener());
        layoutManager.setMaxVisibleItems(0);

        recyclerView.setLayoutManager(layoutManager);
        // we expect only fixed sized item for now
        recyclerView.setHasFixedSize(true);
        // sample adapter with random data
        recyclerView.setAdapter(adapter);
        // enable center post scrolling
        recyclerView.addOnScrollListener(new CenterScrollListener());
        // enable center post touching on item and item click listener

    }

    public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.MyViewHolder> {

        private List<Integer> images;
        private Context mContext;

        public class MyViewHolder extends RecyclerView.ViewHolder {
            public ImageView thumbnail;

            public MyViewHolder(View itemView) {
                super(itemView);
                thumbnail = itemView.findViewById(R.id.thumbnail);
            }
        }

        public GalleryAdapter(Context context, List<Integer> images) {
            mContext = context;
            this.images = images;
        }

        @Override
        public MyViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.item_view, parent, false);

            return new MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(final MyViewHolder viewHolder, final int position) {
            Integer image = images.get(position);

            Glide.with(mContext).load(images.get(position))
                    .thumbnail(0.5f)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(viewHolder.thumbnail);
        }

        @Override
        public int getItemCount() {

            return images.size();
        }

    }
}

activity_carousel_preview.xml

<?xml version="1.0" encoding="utf-8"?>

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".CarouselPreviewActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="952dp"
        android:layout_marginTop="?attr/actionBarSize"
        android:orientation="vertical">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingBottom="@dimen/activity_vertical_margin">

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/list_horizontal"
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:layout_centerInParent="true" />

        </RelativeLayout>

    </LinearLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>