Glid 4の簡単な使用


画像ロードフレームGlid V 4基本使用
Generated APIの使用
Glide 4は、注釈プロセッサ(Annotation Processor)を使用してAPIを生成し、アプリケーションモジュールでこのストリームAPIを使用してRequestBuilder、RequestOptions、および統合ライブラリのすべてのオプションを一度に呼び出すことができます.
1.Glide注記依存を追加
    repositories {
      mavenCentral()
    }

    dependencies {
      annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
    }

2.適切な場所でAppGlideModuleを実現
    @GlideModule
    public final class MyAppGlideModule extends AppGlideModule {}

実装クラスは@GlideModule注記を使用する必要があります.注記がないとModuleが見つかりません.初めてModule実装クラスを追加するにはrebuildプロジェクトが必要です.Module実装クラスが変更された場合、rebuildプロジェクトも必要です.buildが完了すると自動的に新しいクラスが生成されます.その後のロード画像はGlideAppクラスを使用して操作できます.
    GlideApp.with(fragment)
        .load(myUrl)
        //   
        .placeholder(R.drawable.placeholder)
        //      
        .fitCenter()
        //.circleCrop()     
        .into(imageView);

Glide.with(fragment)とは異なり、GlideApp.with(fragment)はfitCenter、placeholderなどのメソッドを直接呼び出すことができ、RequestOptionsに単独で転送する必要はありません.
Generated APIを使用しない
APIを使用しない操作では、RequestOptionsやapplyを新規作成してビットマップなどの操作を実現できます
//         fitCenter(), centerCrop(), bitmapTransform() ,                   ,         ,     MultiTransformation 

RequestOptions requestOptions = new RequestOptions()
            //   
            .placeholder(R.drawable.load_fail)              
            //          ,        
            .transform(new MultiTransformation(new FitCenter(), new YourCustomTransformation())
            //           
            //fitCenter(), centerCrop(), bitmapTransform()
            //     
            .fallback(R.drawable.load_fail);

//        apply   requestOptions

Glide.with(this)
        .load(R.drawable.screen)
        .apply(requestOptions).
        //          ,    
        .transition(DrawableTransitionOptions.withCrossFade())
        .into(imageView);

//                 
Glide.with(this)
        .load(R.drawable.screen)
        //      
        .apply(RequestOptions.fitCenterTransform())
        //.apply(RequestOptions.circleCropTransform())
        //          ,    
        .transition(DrawableTransitionOptions.withCrossFade())
        .into(imageView);

ImageViewのサイズが直接設定されている場合、ビットマップはピクチャのロードの変化に影響しませんが、ピクチャの背景はロード結果に表示されます.ImageView固定サイズではなく、プレースホルダが設定されています.プレースホルダのサイズは、最初のロードが完了した後のピクチャのサイズに直接影響します.そのため、プレースホルダを設定するときは、必ずロードするピクチャのサイズに近いサイズを設定する必要があります.そうしないと、ピクチャのロード効果に影響します.特に要求しない場合は、プレースホルダを設定しないで、ピクチャのロード効果に影響しないようにすることができます.ビットマップの高さは実際のグラフィックの高さよりも高く、最初のロード時に画像が縦に引き伸ばされます.
Glide遷移の使用
画像のロードを完了するビットマップからロードする画像までの間が目立たないようにするには、遷移を使用することができる.RequestBuilderのtransition()メソッドを使用して遷移を指定することができるが、遷移アニメーションは比較的時間がかかり、リストやグリッドリストで使用すると、画像のロードが遅くなる可能性があるため、ListView,GridView,RecyclerViewでは遷移アニメーションの使用を避けることを考慮する必要がある.
ロードプロセスでトランジションアニメーションを使用する一般的なエラー.Glideのデフォルトではクロスフェードが無効になっています.実際に使用する場合、実際のピクチャよりもビットマップが大きい場合、または実際のピクチャの部分が透明な場合、クロスフェードを無効にすると、アニメーションが完了した後もビットマップが表示されます.
Glideが円形の画像をロードすると、四角の透明性が処理されますが、ビットマップ設定の背景により、ビットマップが消えず、表示されます.
解決策はDrawableCrossFadeFactoryパラメータの説明結果をtransition()に設定することです.具体的なコードは
//      
  DrawableCrossFadeFactory build = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
//   transition()
 Glide.with(this)
            .load(R.drawable.screen)
            .apply(requestOptions)
            //             
            .transition(DrawableTransitionOptions.withCrossFade(build))
            .into(imageView);
  
 GlideApp.with(this)
            .load()
            //             
            .transition(DrawableTransitionOptions.withCrossFade(build))
            .fitCenter()
            .circleCrop()
            .placeholder(R.drawable.load_fail)
            .error(R.drawable.load_fail)
            .into(imageView);

トランジションの効果もカスタマイズでき、TransitionFactoryを実装し、DrawableTransitionOptions.with**を使用してカスタマイズしたTransitionFactoryをロードに適用します.フェードアウトオンの方法を変更したようにDrawableTransitionOptions.withCrossFade(カスタムTransitionFactoryクラス)
ListViewおよびRecyclerViewでの使用
GlideはViewの多重化と要求のキャンセルを自動的に処理し、urlがnullであっても心配する必要はなく、Glideはピクチャを空にしたり、設定されたビットマップや失敗したコールバックマップを表示したりします.多重化されたviewが前の位置でGlideにピクチャをロードした場合、新しい位置で新しいロード操作を知るか、clear()を呼び出してGlideの操作を停止する(これは公式の解釈で、意味が分からない)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    if (isImagePosition(position)) {
         String url = urls.get(position);
            Glide.with(fragment)
            .load(url)
            .into(holder.imageView);
    } else {
        Glide.with(fragment).clear(holder.imageView);
        holder.imageView.setImageDrawable(specialDrawable);
    }
}

実はonBindViewHolderメソッドはエントリをスクロールするだけで、ずっと呼び出されていて、呼び出すたびにGlideのロードピクチャ操作を実行するので、設定と部分の時に正常に使えばいいです.テストで問題が見つかりました.RecyclerVeiwエントリレイアウトでImageViewのみをルートラベルとして参照した場合、Glideを使用してピクチャをロードするとエラーが報告され、setTag()の問題が提示されます.これは、Glideがtagに基づいてロードを判断し、リスト内のピクチャのロードエラーを防止するためです.ImageViewのみの場合、tagを設定しない場合はエラーが報告され、解決方法
  • Glideでピクチャをロードする前にImageView.setTag(null)
  • を設定.
  • ImageViewの外部にレイアウトを包み、RelativeLayoutまたはLinearLayoutまたはFrameLayout
  • 初めてブログを书きました.时间を割いて読んでくれてありがとう.いや、足りないところを指摘してほしいです.ありがとうございます.