Reputation: 33
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.
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
Reputation: 3366
Change scaleType
of ImageView
in items to be center_crop
, this will make the image of defined size (dp
s) 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
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