iielse/imageviewer

第一次点击图片时,由于需要通过网络下载图片,没有界面过渡动画

githubliangzai opened this issue · 10 comments

第一次点击图片时,由于需要通过网络下载图片,就没有界面过渡动画,如果网络不好,大图界面会显示一片黑比较久,但是如果我加载图片的时候设置placeholder,此时有过渡动画,但是过渡效果会闪一下

过渡动画依赖缩略图本体.没有缩略图必然没有动画. QQ空间的做法是好像是无过渡动画.微信朋友圈的做法好像是禁止点开大图?.
这个需要开发者保证缩略图的加载正常.比如控制缩略图的大小使其快速加载或者极致点是缩略图下载好后再展示到界面上。

闪现的问题需要贴下效果和你的设置代码。因为demo代码应该是不会闪的。

demo代码 MyImageLoader中通过Glide加载图片时设置占位图,不使用缓存来模拟第一次加载大图图片,过渡动画会有闪烁
image

这里的load在加载第一张时会触发2次.具体见 #99

开发者在第一次load的时候实时提供缩略图给ImageView即可.

image
image
image
上面是我按照大佬的demo使用的代码,但是网络比较卡的情况下第一次点击打开大图时没有过渡动画,表现为大图页显示黑屏,过来一会儿,大图直接加载出来

image
我现在用这样的方式来规避问题

试下

Glide.with(view).load(it)
        .placeholder(view.drawable ?: getDrawable(R.mipmap.placeholder))
        .into(view)

Glide.with(view).load(it)
.placeholder(view.drawable ?: getDrawable(R.mipmap.placeholder))
.into(view)
这个我试过,第一次加载图片的时候,如果网络较慢,过渡动画开始时,图片显示的是占位图,这个没问题,但是如果在过渡动画结束前,如果图片加载成功了,这个时候动画中的PhotoView2的会显示加载成功的图片,但是图片突然变得很大,直到最后动画执行完才回复到正常大小。
这也是我为啥要在onResourceReady中过滤如果正在执行动画就不更新图片显示的原因
image

Glide.with(view).load("")
            .apply { if(view.drawable == null) override(thumbnailImageSize, thumbnailImageSize) }
            .placeholder(view.drawable ?: getDrawable(R.mipmap.placeholder))
            .into(view)

预览加载的时候 固定size试试。thumbnailImageSize 的值就是点击前的那个ImageView的尺寸

不行额
我最开始的问题主要是想在网络比较差的情况下,缩略图未加载出来的时候可以用placeholder做过渡动画,但是设置占位图后过渡动画貌似有问题,现在我觉得缩略图没加载出来前,不需要过渡动画也可以,但是在大图界面最好能加一个loading提示,要不然打开后一片黑啥都没有,用户体验有点不太好

大图界面的loading 请这样加 #115

是的其实不需要占位图的。