2

Twitter ベースのアプリを開発しており、リサイクラー ビューでツイートをアイテムとして表示しています。ツイートに画像が関連付けられている場合にのみ表示される、アイテム レイアウトに画像ビューがあります。xml で imageview の可視性を GONE に設定することでこれを行っています。画像の URL が存在する場合は、onBindView で imageview の可視性を VISIBLE に設定します。

イメージビューの高さを動的にしたいので、その高さをコンテンツをラップするように設定します。しかし、リストが表示されると、画像がどこからともなく表示され、スクロールすると、スクロール速度が速い場合に画像ビューに他の画像が表示され、しばらくすると正しい画像に置き換えられるなど、いくつかの問題が発生するように見えます。かなり目立ちます。そのため、現在、イメージビューで固定の高さを使用してイメージを縮小しています。つまり、イメージビューを埋めていません。これに関する問題は、画像の高さがxmlで指定された高さよりも小さい場合、画像ビューの上下に多くの空白が表示されることです。どうやってやるの。

また、グライドを使用して画像をロードしています。

ここに要求されたように、私のコードは次のとおりです。

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