android - 如何在 recyclerview 中加载图像而不影响 imageview 中定义的大小?
问题描述
我正在使用一个 Web 服务,我正在使用改造从中获取图像。我在 imageView 中显示这些图像并使用 recyclerview 加载多个图像。
这是我的布局文件:
<?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>
对于我拥有的物品:
<?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>
我的适配器类看起来像:这是我的适配器类名称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);
}
}
}
我设置 adpater 的主要活动是: 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();
}
});
出于图像加载的目的,我正在使用通用图像加载器。现在遇到问题,当单个图像来自服务器时,它会根据 imageview 中提到的宽度和高度加载。但是当两个或更多图像的大小不同时。
我已经尝试了几乎所有来自互联网的解决方案,但没有任何效果。我还将布局设置为 (0,0,0,0) 但这也无法解决此问题。
图像看起来像这样,我不知道为什么?
解决方案
将项目更改scaleType
为,这将使图像具有定义尺寸(s),并将裁剪剩余部分,使所有图像尺寸相同。ImageView
center_crop
dp
像这样:
<?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>
推荐阅读
- database - 如何在 PostgreSQL 中有效地索引 2000 个值的向量并找到最近的邻居?
- python - 使用带有“sqlite://”错误的 read_sql 使用 pandas 创建表查询
- symfony - Symfony 5:身份验证非持久性
- android - Android 意图:总是得到 resultCode = 0
- reactjs - 反应窗口中是否存在fixedRowCount?
- asp.net - 带有属性的 DropDownButton 条件语句?
- r - 如何制作一个对R中向量的指数求和的函数?
- java - 剥离内部注释
- vue.js - 在 Vue.js 中工作时,VS Code 不再让我折叠代码并导航到定义
- codenameone - 通过移动构建连接到http时如何解决连接错误?