Android ImageView回收视图中的大小错误的CardView
我的图像视图在回收视图中的卡片视图中有问题 我用Glide加载图像,但是第一次打开应用程序时,CardView中的ImageView显示了错误的宽度和高度,但是如果我转到其他活动并再次返回到Recyclerview,我将看到正确大小的图像 正如您所看到的,绿色不应该被看到 在这里,您可以看到vegeture.xml:Android ImageView回收视图中的大小错误的CardView,android,android-recyclerview,imageview,android-glide,cardview,Android,Android Recyclerview,Imageview,Android Glide,Cardview,我的图像视图在回收视图中的卡片视图中有问题 我用Glide加载图像,但是第一次打开应用程序时,CardView中的ImageView显示了错误的宽度和高度,但是如果我转到其他活动并再次返回到Recyclerview,我将看到正确大小的图像 正如您所看到的,绿色不应该被看到 在这里,您可以看到vegeture.xml: <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardViewVegetables"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="@dimen/corner_radius_cardview"
card_view:cardElevation="@dimen/elevation_cardview"
card_view:cardMaxElevation="@dimen/elevation_cardview"
card_view:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@color/md_green_900">
<RelativeLayout
android:id="@+id/relativeLayoutVegetable1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/md_black_1000">
<ImageView
android:id="@+id/imageVegetable1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:adjustViewBounds="true"
/>
<me.grantland.widget.AutofitTextView
android:id="@+id/nameVegetable1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:textColor="@color/whiteGrayVegetable"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:textStyle="bold"
android:maxLines="2"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/relativeLayoutVegetable2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageVegetable2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:adjustViewBounds="true"/>
<me.grantland.widget.AutofitTextView
android:id="@+id/nameVegetable2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:textColor="@color/whiteGrayVegetable"
android:textStyle="bold"
android:maxLines="2"/>
</RelativeLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
下面是recyclerview的代码:
public class vegetableRVA extends RecyclerView.Adapter<vegetableRVA.VegetableViewHolder>{
private Context context;
private List<vegetable> Vegetables;
class VegetableViewHolder extends RecyclerView.ViewHolder {
private AutofitTextView vegetableName1;
private AutofitTextView vegetableName2;
private ImageView vegetablePhoto1;
private ImageView vegetablePhoto2;
private RelativeLayout relativeLayoutVegetable1;
private RelativeLayout relativeLayoutVegetable2;
VegetableViewHolder(@NonNull View itemView) {
super(itemView);
vegetableName1 = itemView.findViewById(R.id.nameVegetable1);
vegetableName2 = itemView.findViewById(R.id.nameVegetable2);
vegetableName1.setTextSize((float)context.getResources()
.getDisplayMetrics().widthPixels/25);
vegetableName1.setGravity(Gravity.CENTER);
vegetableName2.setTextSize((float)context.getResources()
.getDisplayMetrics().widthPixels/25);
vegetableName2.setGravity(Gravity.CENTER);
vegetablePhoto1 = itemView.findViewById(R.id.imageVegetable1);
vegetablePhoto2 = itemView.findViewById(R.id.imageVegetable2);
@Override
public void onBindViewHolder(@NonNull VegetableViewHolder vegetableViewHolder, int position) {
int widthDP = (int) context.getResources().getDisplayMetrics().widthPixels / 2;
vegetableViewHolder.vegetableName1.setMaxWidth(widthDP);
vegetableViewHolder.vegetableName1.setSizeToFit();
vegetableViewHolder.vegetableName1.setMaxTextSize((int) widthDP/12);
vegetableViewHolder.vegetableName2.setMaxWidth(widthDP);
vegetableViewHolder.vegetableName2.setSizeToFit();
vegetableViewHolder.vegetableName2.setMaxTextSize((int) widthDP/12);
vegetableViewHolder.vegetablePhoto1.setImageDrawable(null);
vegetableViewHolder.vegetablePhoto2.setImageDrawable(null);
if (context != null) {
Glide.with(context)
.asBitmap()
.load(Vegetables.get(position).getImageVegetableDisyuntive().get(0))
.dontAnimate()
.centerCrop()
.override(widthDP+50,heightDP+50 )
.into(vegetableViewHolder.vegetablePhoto1);
Glide.with(context)
.asBitmap()
.load(Vegetables.get(position).getImageVegetableDisyuntive().get(1))
.dontAnimate()
.centerCrop()
.override(widthDP+50, heightDP+50)
.into(vegetableViewHolder.vegetablePhoto2);
}
RelativeLayout.LayoutParams parms = new RelativeLayout.LayoutParams(widthDP,heightDP);
vegetableViewHolder.vegetablePhoto1.setLayoutParams(parms);
vegetableViewHolder.vegetablePhoto2.setLayoutParams(parms);
vegetableViewHolder.vegetablePhoto1.setBackgroundColor(Color.RED);
}
公共类vegetableRVA扩展了RecyclerView.Adapter{
私人语境;
私人蔬菜清单;
类VegetableViewHolder扩展了RecyclerView.ViewHolder{
私有AutofitTextView vegetableName1;
私有AutofitTextView vegetableName2;
私有ImageView vegetablePhoto1;
私有ImageView vegetablePhoto2;
私人相对物yout相对物yout植物表1;
私人相对物yout相对物yout植物表2;
VegetableViewHolder(@NonNull View itemView){
超级(项目视图);
vegetableName1=itemView.findviewbyd(R.id.nameVegetable1);
vegetableName2=itemView.findViewById(R.id.nameVegetable2);
vegetableName1.setTextSize((float)context.getResources()
.getDisplayMetrics().widthPixels/25);
植物胺1.设置重力(重力.中心);
vegetableName2.setTextSize((float)context.getResources()
.getDisplayMetrics().widthPixels/25);
植物胺2.设置重力(重力.中心);
vegetablePhoto1=itemView.findviewbyd(R.id.imageVegetable1);
vegetablePhoto2=itemView.findviewbyd(R.id.imageVegetable2);
@凌驾
BindViewHolder上的公共无效(@NonNull VegetableViewHolder VegetableViewHolder,int位置){
int widthDP=(int)context.getResources().getDisplayMetrics().widthPixels/2;
vegetableViewHolder.vegetableName1.setMaxWidth(widthDP);
vegetableViewHolder.vegetableName1.setSizeToFit();
vegetableViewHolder.vegetableName1.setMaxTextSize((int)widthDP/12);
vegetableViewHolder.vegetableName2.setMaxWidth(widthDP);
vegetableViewHolder.vegetableName2.setSizeToFit();
vegetableViewHolder.vegetableName2.setMaxTextSize((int)widthDP/12);
vegetableViewHolder.vegetablePhoto1.setImageDrawable(空);
vegetableViewHolder.vegetablePhoto2.setImageDrawable(null);
if(上下文!=null){
带(上下文)滑动
.asBitmap()
.load(vegets.get(position.getImageVegetableDisyuntive().get(0))
.dontAnimate()
.centerCrop()
.超控(宽度DP+50,高度DP+50)
.into(vegetableViewHolder.vegetablePhoto1);
带(上下文)滑动
.asBitmap()
.load(vegets.get(position.getImageVegetableDisyuntive().get(1))
.dontAnimate()
.centerCrop()
.超控(宽度DP+50,高度DP+50)
.into(vegetableViewHolder.vegetablePhoto2);
}
RelativeLayout.LayoutParams参数=新的RelativeLayout.LayoutParams(宽度DP、高度DP);
vegetableViewHolder.vegetablePhoto1.setLayoutParams(parms);
vegetableViewHolder.vegetablePhoto2.setlayoutparms;
vegetableViewHolder.vegetablePhoto1.setBackgroundColor(Color.RED);
}
我不知道为什么在我第一次打开de应用程序时,CardView中图像的大小不好,但在打开其他活动后,大小还可以。两个
相对年轻人都有android:layout\u width=“wrap\u content”
,但其所有“子代”都有android:layout\u width=“match\u parent”
。这可能会导致一种不可能的状态,这种状态在某些情况下恰好是正确的。那么,最好的状态是什么?,RelativeLayout
与android:layout\u with=“match\u parent”
以及所有与android:layout\u width=“wrap\u content”匹配的儿童
?我已将所有版面宽度
和版面高度
更改为包裹内容
,但看起来相同。