压缩包

GlideDemo.zip

一、过渡动画

定义Glide如何从占位符到新加载的图片,或从缩略图到全尺寸图像过渡。

交叉淡入(避免占位图还能显示)

DrawableCrossFadeFactory factory=new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(context)
.load(URL)
.apply(requestOptions)
.transition(DrawableTransitionOptions.withCrossFade(factory))
.into(ImageView)holder.itemView);
为了提升性能,请在使用Glide向ListView,GridView或RecyclerView加载图片时考虑避免

二、对占位符和透明图片交叉淡入的常见错误

  1. Glide的默认交叉淡入效果使用了TransactionDrawable。它提供了两种动画模式,由setCrossFadeEnabled()控制。当交叉淡入被禁用时,正在过渡的图片会在原先显示的图像上面淡入。当交叉淡入被启用时,原先显示的图片会从不透明过渡到透明,而正在过渡的图片则会从透明变为不透明。<br /> Glide中,我们默认禁用了交叉淡入,这样通常看起来要好看一些。实际的交叉淡入,如上所述对两个图片同时改变alpha值,通常会在过渡的中间造成一个短暂的白色闪屏,这个时候两个图片都是部分不透明的。不幸的是,虽然禁用交叉淡入通常是一个比较好的默认行为,当待加载的图片包含透明像素时仍然可能造成问题。当占位符比实际加载的图片要大,或者图片部分为透明时,禁用交叉淡入会导致动画完成后占位符在图片后面仍然可见,如果你在加载透明图片时使用了占位符,你可以启用交叉淡入,具体办法时调整DrawableCrossFadeFactory里的参数并将结果传到transition()中:<br /> DrawableCrossFadeFactory factory=new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();

三、实现步骤:

1.默认的是用Drawable来加载图片

image.png

2.如果在with后面调用了安卓的asbitmap(),则就用Bitmap来加载图片

image.png

3.占位符和图片一起显示

image.png

四、整体代码:

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

五、变换

  1. 获取资源并修改它,然后返回被修改后的资源。通常变换操作是用来完成剪裁或对位图应用过滤器。比如对图片进行圆角配置。<br /> Glide.with(this)<br /> .load(URL)<br /> .tranform(...)<br /> .into(iv);

1.CircleCrop:圆角

2.RoundedCorners:四个角度统一指定

3.GranularRoundedCorners:四个角度单独指定

4.Rotate:旋转

六、整体代码:

1.MainActivity文件代码

  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. }
  35. }

2.效果图:

image.png