2

我正在开发一个基于推特的应用程序,并将推文显示为回收站视图中的一个项目。我在项目布局中有一个图像视图,仅当推文也有与之关联的图像时才会显示。我通过在 xml 中将 imageview 可见性设置为 GONE 来做到这一点,如果存在图像 url,我在 onBindView 中将 imageview 可见性设置为 VISIBLE。

我希望图像视图的高度是动态的,所以我设置它的高度来包装内容。但是当显示列表时,看起来图像突然出现并且在滚动时出现了一些其他问题,例如当滚动速度很快时,图像视图正在显示一些其他图像,这些图像在一段时间后被替换为正确的图像并且这种变化很明显。所以,现在我在我的图像视图上使用一个固定的高度来缩小图像,简而言之,不填充图像视图。这样做的问题是,如果图像高度小于 xml 中的指定高度,则图像视图上方和下方会出现大量空白。我希望列表项中出现的图像尽可能大,而不会提及任何问题。我怎样才能做到这一点。

另外,我正在使用 glide 来加载我的图像。

根据要求,这里是我的代码:

item_layout

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="5dp">

        <TextView
            android:id="@+id/text_tweet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:linksClickable="true"
            android:autoLink="web"
            android:textColorLink="@color/primary"/>

        <ImageView
            android:id="@+id/image_tweet"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:visibility="gone"
            tools:ignore="contentDescription" />

</LinearLayout>

我的适配器

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    Tweet tweet = tweets.get(position);
    holder.tweetTextView.setText(tweet.descripion);
    if (!TextUtils.isEmpty(tweet.tweetImage)) {
        holder.tweetImageView.setVisibility(View.VISIBLE);
        Glide.with(mContext)
                .load(tweet.imagUrl)
                .crossFade()
                .centerCrop()
                .into(holder.tweetImageView);
    }
}
4

1 回答 1

0

CenterCrop() 将删除上方和下方的空格。如果 imageView 没有固定高度,convertView 将返回其先前的布局高度,该高度可能与所需的新大小不同,因此如果使用 wrap_content,则在加载图像后滚动时会导致“跳跃效果”(布局更改)

于 2017-04-29T00:19:57.727 回答