web-dev-qa-db-ja.com

グライドライブラリを読み込んだ後に画像が縮小するのはなぜですか

こんにちは私はグリッドビューにグライドイメージローダーライブラリを入力しています。最初にフラグメントが呼び出されたときは、次のようになります perfect しかし、上下にスクロールすると、サイズが変更され、次のようになります too small これは、グリッドビューやグライドライブラリで行っていることですか、それともプレースホルダー画像のようなものですか? 2番目のスクリーンショットで画像を押すと、画像が点灯して、実際にはそのスペース全体が埋められていることを示します。ここで私が間違っていることを誰かが知っていますか?センタークロップなどでグライドプレイでコールを変更してみましたが、違いはないようです。各セルの幅と高さをどのように計算するかわかりません。提案を歓迎します。

ここで編集は、imがグライドを呼び出す方法です

   Glide.with(getActivity())
                .load(mThumbIds[position])
                .placeholder(R.drawable.placeholder)
                .error(R.drawable.ic_drawer)
                .centerCrop()
                .override(500,300)
                .into(imageView);
11
Martin Seal

実際には、画像コンテナ(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);

これがお役に立てば幸いです。

12
Saad Bilal

使用する .dontAnimate() 問題を解決する方法。

Glide.with(context)
 .using(new FirebaseImageLoader())
 .load(pathReference)
 .dontAnimate()
 .placeholder(R.drawable。 place_holder)
 .into(holder.logo);
4
vishnuc156

とにかく.fitCenter()や.centerCrop()のようなメソッドがあります。でこのメソッドを使用してみてください

    Glide.with(getApplicationContext())
                            .load("")
                            .centerCrop()
                            .placeholder(R.drawable.ic_launcher)
                            .crossFade()
.override(1000,1000)
                            .into(myImageView); 
           .
2
Nivedh

ほぼ同じ問題の場合私がしなければならなかったのは.override(maxItemWidthmaxItemHeight。これにより、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>
1

バージョン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);
0
Guy4444

以下は私を助けました:

1)画像ビューでadjustViewBounds = "true"を使用->これにより、画像ビューは、描画/再描画/サイズ変更時に、画像に応じたアスペクト比を維持します。

2)リサイクラービューのアイテムビューxmlおよびイメージビューに対して、layout_width = match_parentおよびlayout_height = wrap_contentを設定します。

理由:

リサイクラービューが、垂直方向に2つの列を持つグリッドレイアウトマネージャーで設定されているとします。これにより、リサイクラービューのアイテム行のxmlが画面幅の半分になります。アイテム行とそのchid(imageview)layout_height属性のmatch_parentの値により、画像は画面の幅の半分になります。現在、adjustViewBounds = trueにより、画像ビュー自体がアスペクト比を維持するために高さを調整します。

0
Mohit