压缩包

GlideDemo.zip

一、Generated API

1.添加Glide注解处理器的依赖:

  1. dependencies{<br /> annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'<br /> }

2.在Application 模块中包含一个AppGlideModule的实现:

  1. @GlideModule<br /> public final class MyAppGlideModule extends AppGlideModule{}

此时我们能够更简单的完成占位符等配置:

  1. GlideApp.with(fragment)<br /> .load(myUrl)<br /> .placeholder(R.drawable.placeholder)<br /> .into(imageView);

二、整体代码

1.MyAppModule文件代码

  1. package com.example.glidedemo;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.app.VoiceInteractor;
  4. import android.graphics.Bitmap;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.ImageView;
  8. import com.bumptech.glide.Glide;
  9. import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions;
  10. import com.bumptech.glide.load.resource.bitmap.CircleCrop;
  11. import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
  12. import com.bumptech.glide.request.RequestOptions;
  13. import com.bumptech.glide.request.transition.DrawableCrossFadeFactory;
  14. public class MainActivity extends AppCompatActivity {
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. ImageView iv = findViewById(R.id.iv);
  20. // RequestOptions requestOptions = new RequestOptions()
  21. // .placeholder(R.drawable.hold)
  22. // .error(R.drawable.error)
  23. // .fallback(R.drawable.empty)
  24. // .override(100, 100);
  25. // 常见错误:对占位符和透明图片交叉淡入可能都会显示,这时候就需要用到一个方法为factory
  26. DrawableCrossFadeFactory factory=
  27. new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
  28. Glide.with(this).asBitmap()
  29. .load("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202006%2F03%2F20200603134848_dJURK.thumb.1000_0.jpeg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1627314693&t=ed1ffd3b9ea4133383ea827e1668999a")
  30. // .apply(requestOptions)
  31. .transition(BitmapTransitionOptions.withCrossFade(factory))
  32. .transform(new CircleCrop())
  33. .into(iv);
  34. GlideApp.with(this).load("").placeholder(R.drawable.empty).into(iv);
  35. }
  36. }

2.效果图:

image.png

三、GlideExtension与GlideOption

1.定义一个在频繁使用的选项集合。

  1. @GlideExtension<br /> public class MyAppExtension{<br /> private MyAppExtension(){} // utility class<br /> @GlideOption<br /> public static BaseRequestOption<?> defaultImg(BaseRequestOptions<?> options){<br /> return options<br /> .placeholder(R.drawable.hold)<br /> .error(R.drawable.error)<br /> .fallback(R.drawable.fallback);<br /> }

使用对比:

  1. GlideApp.with().load().placeholder(R.drawable.holder).error(R.drawable.error).fallback(R.drawable.fallback)<br /> GlideApp.with().load().defaultImg()

注:defaultImg除了transition的问题无法解决,其他都能直接解决

四、整体代码

1.MyAppExtension文件代码

  1. package com.example.glidedemo;
  2. import com.bumptech.glide.annotation.GlideExtension;
  3. import com.bumptech.glide.annotation.GlideOption;
  4. import com.bumptech.glide.request.BaseRequestOptions;
  5. @GlideExtension
  6. public class MyAppExtension {
  7. // utility class
  8. private MyAppExtension(){
  9. }
  10. @GlideOption
  11. public static BaseRequestOptions<?> defaultImg(BaseRequestOptions<?> options){
  12. return options
  13. .placeholder(R.drawable.hold)
  14. .error(R.drawable.error)
  15. .fallback(R.drawable.empty);
  16. }
  17. }

2.MainActivity文件代码

image.png

3.效果图:

image.png