itsandpro
itsandpro

Reputation: 33

How to load images in recyclerview without affecting defined size in imageview?

I am working with a Webservice from which I am fetching the images using retrofit. I am showing those images in imageView and used a recyclerview to load multiple images.
Here are my layout files:

<?xml version="1.0" encoding="utf-8"?>    
<android.support.constraint.ConstraintLayout 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:id="@+id/planscontainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
     <android.support.v7.widget.Toolbar
        android:id="@+id/subscplans"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="1dp"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
         <Button
            android:id="@+id/backplans"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_marginLeft="50dp"
            android:background="@drawable/leftarrow" />
         <ImageView
            android:id="@+id/appiconhere"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginStart="400dp"
            android:src="@drawable/moremovelogo" />
     </android.support.v7.widget.Toolbar>
     <TextView
        android:id="@+id/planname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="25dp"
        android:layout_marginTop="41dp"
        android:layout_marginEnd="319dp"
        android:text="Plan Id:"
        app:layout_constraintEnd_toStartOf="@+id/textView3"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/subscplans" />   
     <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="324dp"
        android:layout_marginTop="41dp"
        android:layout_marginBottom="28dp"
        android:text="1"
        app:layout_constraintBottom_toTopOf="@+id/textView11"
        app:layout_constraintStart_toEndOf="@+id/planname"
        app:layout_constraintTop_toBottomOf="@+id/subscplans"
        app:layout_constraintVertical_bias="0.0" /> 
     <TextView
        android:id="@+id/duration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="25dp"
        android:layout_marginTop="28dp"
        android:text="Plan Name:"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/planname" />
     <TextView
        android:id="@+id/price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="25dp"
        android:layout_marginTop="20dp"
        android:text="Price:"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/duration" /> 
     <TextView
        android:id="@+id/noofmoviesdownload"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="25dp"
        android:layout_marginTop="18dp"
        android:layout_marginEnd="191dp"
        android:text="No. of movies can be download:"
        app:layout_constraintEnd_toStartOf="@+id/textView13"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/price" /> 
     <TextView
        android:id="@+id/canbeviewed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="213dp"
        android:text="No. of movies can be viewed"
        app:layout_constraintEnd_toStartOf="@+id/textView14"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/noofmoviesdownload" />    
     <TextView
        android:id="@+id/samemovieviewed"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="25dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="143dp"
        android:text="No. of times same movie can be viewed"
        app:layout_constraintEnd_toStartOf="@+id/textView15"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/canbeviewed" />    
     <TextView
        android:id="@+id/timesdownload"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="25dp"
        android:layout_marginTop="17dp"
        android:layout_marginEnd="126dp"
        android:text="No. of times same movie can be download"
        app:layout_constraintEnd_toStartOf="@+id/textView16"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/samemovieviewed" />   
     <TextView
        android:id="@+id/rentpe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="26dp"
        android:layout_marginTop="18dp"
        android:layout_marginEnd="119dp"
        android:text="No. of times same movie can be get on rent"
        app:layout_constraintEnd_toStartOf="@+id/textView17"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/timesdownload" />    
     <TextView
        android:id="@+id/textView11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="310dp"
        android:layout_marginTop="28dp"
        android:text="TextView"
        app:layout_constraintStart_toEndOf="@+id/duration"
        app:layout_constraintTop_toBottomOf="@+id/textView3" />
     <TextView
        android:id="@+id/textView13"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="362dp"
        android:layout_marginTop="19dp"
        android:text="TextView"
        app:layout_constraintStart_toEndOf="@+id/price"
        app:layout_constraintTop_toBottomOf="@+id/textView11" />    
     <TextView
        android:id="@+id/textView14"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="194dp"
        android:layout_marginTop="19dp"
        android:text="TextView"
        app:layout_constraintStart_toEndOf="@+id/noofmoviesdownload"
        app:layout_constraintTop_toBottomOf="@+id/textView13" />   
     <TextView
        android:id="@+id/textView15"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="216dp"
        android:layout_marginTop="15dp"
        android:layout_marginEnd="480dp"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/canbeviewed"
        app:layout_constraintTop_toBottomOf="@+id/textView14" />   
     <TextView
        android:id="@+id/textView16"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="146dp"
        android:layout_marginTop="25dp"
        android:text="TextView"
        app:layout_constraintStart_toEndOf="@+id/samemovieviewed"
        app:layout_constraintTop_toBottomOf="@+id/textView15" />    
     <TextView
        android:id="@+id/textView17"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="130dp"
        android:layout_marginTop="16dp"
        android:text="TextView"
        app:layout_constraintStart_toEndOf="@+id/timesdownload"
        app:layout_constraintTop_toBottomOf="@+id/textView16" />        
     <Button
        android:id="@+id/buyplan"
        android:layout_width="194dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="227dp"
        android:layout_marginTop="106dp"
        android:layout_marginEnd="59dp"
        android:background="@color/tw__composer_blue"
        android:text="Buy Plan"
        android:textColor="@color/white"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView13"
        app:layout_constraintTop_toBottomOf="@+id/subscplans" />    
     <Button
        android:id="@+id/showplans"
        android:layout_width="194dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="224dp"
        android:layout_marginTop="37dp"
        android:layout_marginEnd="62dp"
        android:layout_marginBottom="229dp"
        android:background="#d156b8"
        android:text="Show plans"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView15"
        app:layout_constraintTop_toBottomOf="@+id/buyplan"
        app:layout_constraintVertical_bias="0.0" />  
     <TextView
        android:id="@+id/textView19"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="121dp"
        android:layout_marginTop="19dp"
        android:text="TextView"
        app:layout_constraintStart_toEndOf="@+id/rentpe"
        app:layout_constraintTop_toBottomOf="@+id/textView17" />
      <RelativeLayout
        android:id="@+id/linearlayoutimage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/textView19">  
         <android.support.v7.widget.RecyclerView
            android:id="@+id/myrecyclerview"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
         </android.support.v7.widget.RecyclerView>
     </RelativeLayout>
     <Button
        android:id="@+id/cancelplan"
        android:layout_width="194dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="221dp"
        android:layout_marginTop="37dp"
        android:layout_marginEnd="60dp"
        android:background="@color/tw__composer_deep_gray"
        android:text="cancel plan"
        android:textColor="@color/white"
        android:visibility="gone"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView17"
        app:layout_constraintTop_toBottomOf="@+id/showplans" /> 
</android.support.constraint.ConstraintLayout>

and for the items I have:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"   
  >  
    <ImageView
        android:id="@+id/imagethumb"
        android:layout_width="180dp"
        android:layout_height="200dp"
        android:scaleType="fitEnd"/>    
    <TextView
        android:id="@+id/nothing"
        android:visibility="gone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />   
</LinearLayout>

And my Adapter class looks like: this is my adapter class name ImageAdapter.java

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.SubsImageHolder> {

    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.newlogo)
            .showImageForEmptyUri(R.drawable.newlogo)
            .showImageOnFail(R.drawable.newlogo)
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .considerExifParams(true)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .build();

    private Context context;
    private List<ThumbPojo> imageList;

    public ImageAdapter(Context context, List<ThumbPojo> items) {
        this.context = context;
        this.imageList = items;
    }

    public Context getContext() {
        return context;
    }

    public void setContext(Context context) {
        this.context = context;
    }

    public List<ThumbPojo> getImageList() {
        return imageList;
    }

    public void setImageList(List<ThumbPojo> imageList) {
        this.imageList = imageList;
    }

    @NonNull
    @Override
    public SubsImageHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        View view = layoutInflater.inflate(R.layout.subscriptionimages, viewGroup, false);
        return new SubsImageHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull SubsImageHolder subsImageHolder, int i) {
       ThumbPojo item = imageList.get(i);
        subsImageHolder.textView.setText(item.getMovieName());
        subsImageHolder.imageView.setImageDrawable(null);
        subsImageHolder.imageView.layout(0,0,0,0);

        ImageLoader.getInstance().displayImage(item.getThumbnail(),subsImageHolder.imageView,options);

//        Glide.with(context)
//                .load(item.getThumbnail())
//                .into(subsImageHolder.imageView);

    }

    @Override
    public int getItemCount() {
        return imageList.size();
    }

     class SubsImageHolder extends RecyclerView.ViewHolder {

        ImageView imageView;
        TextView textView;

        public SubsImageHolder(@NonNull View itemView) {

            super(itemView);
            imageView = itemView.findViewById(R.id.imagethumb);
            textView = itemView.findViewById(R.id.nothing);
        }
    }
}

And my Main Activity where I am setting my adpater is : SubscriptionPlans.java:

 public class SubscriptionPlans extends AppCompatActivity {

    TextView planid, planname, planprice, noofmoviedownload, noofmovieviewed, sameviewed, samedownload, rentit, nomovi;
    Intent intent = getIntent();
    ImageView imageView3, imageView4;
    String one, two, three, four, five, six, seven, eight;
    List<ThumbPojo> list;
    Button button;
    Button show, buy, cancel;
    int position;
    String allvalues;
    RelativeLayout linearLayout;
    String id;
    int userid, usertype;
    int po;
    String ress;
    public String subs;

    List<CheckActiveOrNot> list1;

    RecyclerView recyclerView;
    ImageAdapter imageAdapter;
    List<ThumbPojo> imageList; 
    List<String> images = new ArrayList<>();
    AVLoadingIndicatorView progressBar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.premiumsubscriptionplans);
//        progressBar=findViewById(R.id.progressBar);
//        showProgressDialog();

       * recyclerView = findViewById(R.id.myrecyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));*

        userid = SharedPrefsHelper.getUserId(SharedPrefsHelper.USER_ID, 0);
        usertype = SharedPrefsHelper.getUserType(SharedPrefsHelper.USER_TYPE, 0);



        linearLayout = findViewById(R.id.linearlayoutimage);

        //  imageView4 = findViewById(R.id.imageView4);
        planid = findViewById(R.id.textView3);
        planname = findViewById(R.id.textView11);
        planprice = findViewById(R.id.textView13);
        noofmoviedownload = findViewById(R.id.textView14);
        noofmovieviewed = findViewById(R.id.textView15);
        sameviewed = findViewById(R.id.textView16);
        samedownload = findViewById(R.id.textView17);
        rentit = findViewById(R.id.textView19);
        TextView notshow = findViewById(R.id.planname);
        notshow.setVisibility(View.GONE);
        planid.setVisibility(View.GONE);

        button = findViewById(R.id.backplans);
        show = findViewById(R.id.showplans);
        buy = findViewById(R.id.buyplan);
        cancel = findViewById(R.id.cancelplan);


        id = getIntent().getStringExtra("planid");
        imageList = new ArrayList<>();

        Call<List<ThumbPojo>> caller = ApiClient.getInstance().getApiService().getThumbimages(id);
        caller.enqueue(new Callback<List<ThumbPojo>>() {
            @Override
            public void onResponse(Call<List<ThumbPojo>> call, Response<List<ThumbPojo>> response) {
                list =response.body();

//                JSONArray jsonArray=new JSONArray(list);
//                for(int i=0;i<jsonArray.length();i++)
//                {
//                    try {
//                        JSONObject jsonObject=jsonArray.getJSONObject(i);
//                        String name=jsonObject.getString("movieName");
//                        String imageurl=jsonObject.getString("thumbnail");
//
//                        ThumbPojo thumbPojo=new ThumbPojo(name,imageurl);
//                        imageList.add(thumbPojo);
//                    } catch (JSONException e) {
//                        e.printStackTrace();
//                    }
//
//                }

                *imageAdapter=new ImageAdapter(SubscriptionPlans.this,list);
                recyclerView.setHasFixedSize(true);
                recyclerView.setAdapter(imageAdapter);
//                dismissProgressDialog();*

//                if (list.get(position).getThumbnail() != null) {
//                    ImageLoader.getInstance().displayImage(list.get(position).getThumbnail(), imageView3, options);
//                    // ImageLoader.getInstance().displayImage(list.get(position).getThumbnail(),imageView4,options);
//                } else {
//                    nomovi.setText("No movies under this plan");
//                }


            }


            @Override
            public void onFailure(Call<List<ThumbPojo>> call, Throwable t) {
                t.getMessage();
            }
        });

for image loading purposes I am using universal image loader. Now coming to the problem, when a single image is coming from the server then it is loaded according to the width and height mentioned in the imageview .but when two or more are coming the images' sizes are different.

images looks like this

I have tried almost all the solution from the internet but nothing works fine. I have also set the layout to (0,0,0,0) but that also not able to fix this.

Images are looking like this I don't know why?

Upvotes: 1

Views: 840

Answers (2)

letsintegreat
letsintegreat

Reputation: 3366

Change scaleType of ImageView in items to be center_crop, this will make the image of defined size (dps) and will crop the remaining portion off, making all the images of same size.

Like this:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/imagethumb"
        android:layout_width="180dp"
        android:layout_height="200dp"
        android:scaleType="center_crop"/>

    <TextView
        android:id="@+id/nothing"
        android:visibility="gone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Upvotes: 1

Rajat Mittal
Rajat Mittal

Reputation: 423

Try changing scaleType in Imageview, whichever suits best.

  <ImageView
        android:id="@+id/imagethumb"
        android:layout_width="180dp"
        android:layout_height="200dp"
        android:scaleType="center_inside"/>

or Try staggeredGridLayout.

Upvotes: 0

Related Questions