首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConstraintLayout beta 5 RecyclerView中的ImageView缩放问题

ConstraintLayout beta 5 RecyclerView中的ImageView缩放问题
EN

Stack Overflow用户
提问于 2017-02-14 14:11:59
回答 2查看 641关注 0票数 1

自从我更新到com.android.support.constraint:constraint-layout:1.0.0-beta5之后,我在使用ImageView时观察到了奇怪的行为,这个ImageViewRecyclerAdapter中使用的ConstraintLayout中进行缩放

我做了一个演示项目,用最少的步骤复制:

行非常简单:一个标题和一个图像:

代码语言:javascript
复制
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                         xmlns:app="http://schemas.android.com/apk/res-auto"
                                         android:layout_width="match_parent"
                                         android:layout_height="wrap_content"
>

<View
    android:id="@+id/header"
    android:layout_width="0dp"
    android:layout_height="10dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    />

<ImageView
    android:id="@+id/image"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="centerInside"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/header"
    />

适配器如下所示:

代码语言:javascript
复制
public class RecAdapter extends RecyclerView.Adapter<BooleanViewHolder> {

private List<Boolean> list;

public RecAdapter(ArrayList<Boolean> list) {
    this.list = list;
}

@Override
public BooleanViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    return new BooleanViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false));
}

@Override
public void onBindViewHolder(BooleanViewHolder holder, int position) {

    holder.header.setBackgroundColor(list.get(position) ? Color.parseColor("#00FF00") : Color.parseColor("#FF0000"));

    holder.image.setImageDrawable(null);
    if (list.get(position)) {
        holder.image.setVisibility(View.VISIBLE);
        holder.image.setImageDrawable(holder.image.getContext().getResources().getDrawable(R.drawable.remove_me));
    } else {
        holder.image.setVisibility(View.GONE);
    }
}

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


static class BooleanViewHolder extends RecyclerView.ViewHolder {
    private final ImageView image;
    private final View header;

    BooleanViewHolder(View itemView) {
        super(itemView);
        header = itemView.findViewById(R.id.header);
        image = (ImageView) itemView.findViewById(R.id.image);
    }
}
}

RecyclerView和适配器初始化如下:

代码语言:javascript
复制
     recView = (RecyclerView) findViewById(R.id.recView);
//      final StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recView.setLayoutManager(layoutManager);
        ArrayList<Boolean> list = new ArrayList<>();
        list.add(true);
        list.add(false);
        list.add(true);
        list.add(false);
        list.add(true);
        list.add(false);
        list.add(true);
        list.add(false);
        recView.setAdapter(new RecAdapter(list));

演示功能是:如果true标头是绿色的,并显示图像。如果false标头是红色的,并且ImageView是隐藏的。

在RecyclerView上上下滑动后的结果:

使用beta-5(左)和beta-4 (右):

我使用API 24 & API 19同时使用StaggeredGridLayoutManagerLinearLayoutManager进行了测试。

我知道这看起来更像是谷歌(AOSP发行)的问题报告,但我会利用这篇文章来达到这个目的,除非有人指出我犯了什么错误或者找到了解决办法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-18 18:51:19

这个问题已经由Google在图书馆的主分支中解决了,并且在下一个版本之后将正常工作。

票数 0
EN

Stack Overflow用户

发布于 2017-02-15 17:46:38

我相信这是beta5和wrap_content中的一个bug。我提出了一个错误,并与一名从事ConstraintLayout工作的谷歌工程师交谈。他确认了这个错误,并复制了它,几天后他在master中修复了它,所以我预计它会在下一个版本中修复(未知日期)。

错误报告位于这里

注意,在两天前,它是Fixed in master.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42228383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档