こんにちは私はグリッドビューにグライドイメージローダーライブラリを入力しています。最初にフラグメントが呼び出されたときは、次のようになります しかし、上下にスクロールすると、サイズが変更され、次のようになります これは、グリッドビューやグライドライブラリで行っていることですか、それともプレースホルダー画像のようなものですか? 2番目のスクリーンショットで画像を押すと、画像が点灯して、実際にはそのスペース全体が埋められていることを示します。ここで私が間違っていることを誰かが知っていますか?センタークロップなどでグライドプレイでコールを変更してみましたが、違いはないようです。各セルの幅と高さをどのように計算するかわかりません。提案を歓迎します。
ここで編集は、imがグライドを呼び出す方法です
Glide.with(getActivity())
.load(mThumbIds[position])
.placeholder(R.drawable.placeholder)
.error(R.drawable.ic_drawer)
.centerCrop()
.override(500,300)
.into(imageView);
実際には、画像コンテナ(ImageView)に固定の幅と高さを指定する必要があります。
<ImageView
Android:id="@+id/channelImage"
Android:layout_width="65dp"
Android:layout_height="65dp"
Android:layout_centerHorizontal="true"
Android:layout_margin="10dp"
Android:src="@drawable/sama" />
次に、glideを呼び出すときに、overrideメソッドを使用して幅と高さを動的にオーバーライドする必要があります。これは、コンテナの最大の幅と高さです。
Glide.with(getActivity())
.load("your url")
.placeholder(R.drawable.tv2v_icon)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.fitCenter()
.override(500,500)
.into(channelImage);
これがお役に立てば幸いです。
使用する .dontAnimate() 問題を解決する方法。
Glide.with(context) .using(new FirebaseImageLoader()) .load(pathReference) .dontAnimate() .placeholder(R.drawable。 place_holder) .into(holder.logo);
とにかく.fitCenter()や.centerCrop()のようなメソッドがあります。でこのメソッドを使用してみてください
Glide.with(getApplicationContext())
.load("")
.centerCrop()
.placeholder(R.drawable.ic_launcher)
.crossFade()
.override(1000,1000)
.into(myImageView);
.
ほぼ同じ問題の場合私がしなければならなかったのは.override(maxItemWidth、maxItemHeight)。これにより、Glideが行っていた画像の縮小を防ぐことができたようです。
注:maxItemWidth/maxItemHeightは、リサイクラービューアイテムコンテナーに使用した値ですが、画像を保持するImageViewは実際には小さくなっています(境界線があるため)およびラベル)。
Glide
.with(context)
.load(categoryItem.getThumbnail())
.asBitmap()
.fitCenter()
.override(itemWidth, itemHeight)
.into(holder.imgIcon);
興味があれば、これが私のxmlです:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@id/item_container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="center_vertical"
Android:orientation="vertical"
Android:padding="4dp">
<FrameLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:background="@drawable/rounded_white_rectangle"
Android:padding="2dp"
>
<ImageView
Android:id="@+id/icon"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@Android:color/white"
Android:scaleType="fitCenter"
Android:adjustViewBounds="true"
/>
</FrameLayout>
</FrameLayout>
バージョンGlideV4(4.8.0)で機能するソリューションを見つけました
'Glide'をgradleにインポートします(現在、最新バージョンは4.8.0です):
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
recycleViewアイテムのImageViewは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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">
<ImageView
Android:id="@+id/image"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:adjustViewBounds="true"
Android:scaleType="fitCenter"
Android:src="@drawable/ic_launcher_background" />
</RelativeLayout>
およびアダプタ内:
final Content content = getItem(position);
ImageViewHolder viewHolder = (ImageViewHolder) holder;
RequestOptions options = new RequestOptions();
options.optionalFitCenter();
Glide.with(Application_News16.getAppContext())
.load(content.getValue())
.apply(options)
.apply(new RequestOptions()
.placeholder(R.drawable.img_loading_s)
.error(R.drawable.img_error_s))
.into(viewHolder.image);
以下は私を助けました:
1)画像ビューでadjustViewBounds = "true"を使用->これにより、画像ビューは、描画/再描画/サイズ変更時に、画像に応じたアスペクト比を維持します。
2)リサイクラービューのアイテムビューxmlおよびイメージビューに対して、layout_width = match_parentおよびlayout_height = wrap_contentを設定します。
理由:
リサイクラービューが、垂直方向に2つの列を持つグリッドレイアウトマネージャーで設定されているとします。これにより、リサイクラービューのアイテム行のxmlが画面幅の半分になります。アイテム行とそのchid(imageview)layout_height属性のmatch_parentの値により、画像は画面の幅の半分になります。現在、adjustViewBounds = trueにより、画像ビュー自体がアスペクト比を維持するために高さを調整します。