写在前面:这篇文章作者是Norman Peitek,所有著作权归原作者所有,我只是在学习Glide的时候看到有简书的作者 weiyf 写了双语的翻译,觉得非常好,但是作者只写了几篇,估计是比较忙吧。于是我就去看原博了,发现原博的英文也不会很难懂,这里只是方便学习做了翻译(顺便学英语(逃),建议英文基础还可以的同学直接看原文:https://futurestud.io/tutorials/glide-placeholders-fade-animations

如有错误欢迎指正,谢谢!

前几篇传送门:

原文传送门:

正文:

在学习完如何从各种源加载图片后,本周将讲述占位符,也就是在图片加载出来前默认显示的东西。

毫无疑问,一个空白的 ImageView 对于任何UI来讲都不太美观,如果你使用Glide,你很可能是通过网络来加载图片。那么根据用户的网络环境,这可能需要花费较长时间。对于App来讲,一个好的做法是在图片加载出来前先显示一个默认的图片。

Glide提供了一个流畅的接口可以轻而易举的实现!只需要调用.placeHolder()并传入一个图片资源ID即可,这样Glide就会在你的图片加载出来前,显示这张默认的图片。

Glide

.with(context)

.load(UsageExampleListViewAdapter.eatFoodyImages[0])

.placeholder(R.mipmap.ic_launcher) // 也可以是一个drawable

.into(imageViewPlaceholder)

很明显,你不能设置一个网络链接作为这个占位符,因为它也需要网络加载。相比之下,资源文件和drawable则可以保证可用。但是,load()方法的参数可以是任何类型的。但有一些情况可能会加载不出来(比如 没有网络,服务器挂了,等等...),删除或者无法访问。在下一节,我们将来讲解 “异常占位符”。

异常占位符(Error Placeholder): .error()

假设我们的app尝试从网站上加载一张图片,但是这个网站已经挂掉了。Glide提供了一个“加载错误”的回调,并且我们可以采取相应的措施。我们稍后会介绍这中情况,但对于现在而言,那么做太复杂了。大多情况下是使用一个错误占位符,这足以告诉用户图片加载出现异常了。

做法跟我们上面显示默认图片有点类似,只是调用的方法是.error():

Glide

.with(context)

.load("http://futurestud.io/non_existing_image.png")

.placeholder(R.mipmap.ic_launcher) // 也可以是一个drawable

.error(R.mipmap.future_studio_launcher) // 一旦图片加载失败,则会显示这个资源id指定的图片

.into(imageViewError);

就是这样,如果你load()里面指定的图片无法成功加载,那么Glide就会显示R.mipmap.future_studio_launcher来代替。同样的,.error()可以接受的参数只能是已经初始化的drawable或者指向某个资源id(R.drawable.)。

crossFade()的使用(淡入淡出)

如论你是否在图片加载前显示占位符,改变ImageView的图片对于你的界面来讲非常重要。怎样做才能看起来更流畅和简单?一个简单的做法是使用淡入淡出动画.Glide附带了标准的淡入淡入的动画,在(Glide3.6.1版本)后是默认开启的。如果你想强制Glide使用淡入淡出动画,你可以在builder中调用它:

Glide

.with(context)

.load(UsageExampleListViewAdapter.eatFoodyImages[0])

.placeholder(R.mipmap.ic_launcher)

.error(R.mipmap.future_studio_launcher)

.crossFade()//ps:这个

.into(imageViewFade);

这个corssFade()方法有另一个形式:.crossFade(int duration),如果你想减慢(或加快)动画速度,随便传一个以ms为单位的动画时长即可,默认的动画时长是300ms。

dontAnimate()的使用(不要动画)

如果你想直接显示图片,不需要动画效果,那么在builder中调用.dontAnimate()即可:

Glide

.with(context)

.load(UsageExampleListViewAdapter.eatFoodyImages[0])

.placeholder(R.mipmap.ic_launcher)

.error(R.mipmap.future_studio_launcher)

.dontAnimate()//ps:这个

.into(imageViewFade);

这样就会直接显示图片到ImageView里面,没有任何过渡动画。请确保你这么做有充分的理由!(ps:因为那样效果不好)

值得一提的是,以上这些参数都是相互独立设置的,不需要相互依赖。例如,你可以不调用.placeholder()而只设置.error()。你也可以在没有设置占位符的情况下设置crossFade()动画,这些参数以任何形式的组合都是可以的。

展望

真心希望你能从这个博客帖子理解并且收获许多。对于提高用户体验来说,不会突然地弹出图片是极其重要的。所以,如果出现加载异常的时候,要用明显的方式告诉用户。Glide提供了一些很容易使用的方法,它能帮你塑造一个更好的应用。

但我们目前还没有做一些优化。下一周,我们将了解图片的调整与缩放。

android glide 动画,Glide-默认图与过渡动画(Placeholders Fade Animations)相关推荐

  1. android图片缩放动画,Android开发笔记——点击查看大图过渡动画与图片缩放与移动...

    从一个activity到另一个activity的过渡 1.小图点击事件代码@Override public void onClick(View view) { switch (view.getId() ...

  2. android 动画格式下载,安卓p过渡动画文件下载

    安卓p过渡动画模块是一个非常不错的安卓模块文件,可以帮助大家在切换各种页面和应用的时候更加的流程和美观,安装包非常的小巧,几乎不会占用大家的手机空间,而且免费使用.有喜欢的小伙伴可以来体验! 安卓p过 ...

  3. Vue动画事件详解及过渡动画实例

    为了应用过渡效果,需要在目标元素上使用 transition 特性: <div v-if="show" transition="my-transition" ...

  4. vue移动端过渡动画_Vue.js实现微信过渡动画左右切换效果

    前言 需要用到的技术栈:Vue+Vuex 先看看效果图 过渡动画 示例代码 router.beforeEach(function (to,from,next) { const toIndex = hi ...

  5. glide加载gif图不显示动画_关于glide加载gif问题

    我只能提供代码 case ExpressionManager.EXPRESSION_STANDBY: resId = R.raw.standby; // resId = R.mipmap.test_o ...

  6. glide加载gif图不显示动画_用Python绘制会动的柱形竞赛图

    我们经常看到的Bar Chart Race(柱形竞赛图),可以看到数据的呈现非常的直观.今天就一起来学习下如何生成和上面一样的柱形竞赛图. 1.导入Python库 2.加载数据集 这里使用的是城市人口 ...

  7. android动画延迟执行,Android 过渡动画框架

    为了帮助视图层次内部和视图之间的过渡更加容易实现动画效果,Android 提供了 Transition 框架.这一套框架能够在视图之间提供一种或者多种动画过渡效果.过渡动画要解决的另一个主要问题就是对 ...

  8. Android 过渡动画

    标注 过渡动画最好都在Activity之间实现 Android 的过渡动画可以分为四个部分: Activity/Fragment 切换时的内容过渡动画(content transition) Acti ...

  9. Android Transition过渡动画

    在Android 4.4 Transition 就已经引入了,但在Android 5.0(API 21)之后,Transition 被更多的应用起来.相对于View Animation或Propert ...

最新文章

  1. 跟我做CVS版本管理试验
  2. sql 按字段指定值排序
  3. SQL SERVER 2005 请求失败或服务未及时响应
  4. escape()、encodeURI()、encodeURIComponent()区别详解
  5. MySQL第8天:MySQL索引优化分析之SQL慢
  6. 面试题 HashMap和HashTable有什么区别
  7. bvp解算器是什么_那些学习了编程的中学生,为什么会更可能成功?
  8. 软件生成问候图片_这些社交软件你玩过几个?
  9. 抖音联合九大博物馆推出“云游”活动 网友可在家看展
  10. mysql 主从 锁库_mysql 5.7.21 主从集群恢复GTID方式(不锁库)
  11. IPv6網絡開發范例
  12. java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap问题的解决
  13. 安装oracle 10g 的艰难之旅
  14. m3u8格式转换器android,m3u8转mp4转换器下载_m3u8转mp4转换器官方下载-太平洋下载中心...
  15. P3717 [AHOI2017初中组]cover——洛谷(差分)
  16. Android以太网卡配置启动流程和双网卡同时支持的实现
  17. linux系统 系统推荐 deepin国产系统 最好用的国产linux系统 Windows系统的优秀替代品 deepin系统安装 系统安装 deepin
  18. 联想电脑安装Ubuntu后无法进入bios
  19. httpPost.setHeader,httpPost.addHeader 区别
  20. Java implements和extends的区别

热门文章

  1. vivado 和 modesim 联合仿真快速修改重仿
  2. 7 .opencv中把鼠标当画笔使用
  3. 《纽约时报》:Facebook计划外部募资10亿美元支持其加密货币项目
  4. 校准曲线、标准曲线和工作曲线,什么区别?
  5. 数美科技:智能时代怎么样构建金融反欺诈体系
  6. Android4.4后短信机制的变化
  7. qq机器人插件之舔狗日记
  8. 【计算机毕业设计】323电子病历系统
  9. 建设元宇宙需要哪些硬件?
  10. 【安信可NB-IoT模组EC系列AT指令应用笔记①】连接TCP服务器,实现远程收发数据