Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

存在多张预览图时,左右滑动的手势有时候会失灵 #182

Open
HenryWu01 opened this issue Dec 19, 2022 · 15 comments
Open

存在多张预览图时,左右滑动的手势有时候会失灵 #182

HenryWu01 opened this issue Dec 19, 2022 · 15 comments
Labels
question Further information is requested

Comments

@HenryWu01
Copy link

如下面的视频所示,有时候在中间的图向左或者向右滑无响应,再次向左向右滑即可。

a.mp4

应该不是内存的问题,8GB 实体内存 + 5GB 虚拟内存
手机型号: Oppo Reno 8 Pro +
安卓版本: 13
BigImageViewPager, Glide, OkHttp 均使用最新版本

使用代码如下, parent 是 Fragment

val builder = when (val parent = adapterParent) {
    is Fragment -> ImagePreview.instance.setContext(parent.requireActivity())
    is AppCompatActivity -> ImagePreview.instance.setContext(parent)
    else -> throw Exception("Invalid parent")
}
builder.setIndex(index)
    .setLoadStrategy(ImagePreview.LoadStrategy.Default)
    .setImageInfoList(ImageHelper.processImageInfo(item.imageUrl))
    .start()
@SherlockGougou
Copy link
Owner

SherlockGougou commented Dec 19, 2022 via email

@SherlockGougou
Copy link
Owner

结合coil的issues排查发现,这个应该还是和HEIF有关系,在读取EXIF信息时报错,导致主进程阻塞。
我看能不能HEIF的图片不读取EXIF信息做旋转了。

@SherlockGougou SherlockGougou added the question Further information is requested label Dec 22, 2022
@SherlockGougou
Copy link
Owner

好像不行,我将库中读取EXIF的地方增加了判断,如果是HEIF时直接return,依旧会报错,依旧会卡顿。暂时先这样,后续发现解决方案时再优化。

@HenryWu01
Copy link
Author

可能还是跟这个 issue 有关系?#184 (comment)

@HenryWu01
Copy link
Author

可能还是跟这个 issue 有关系?#184 (comment)

我看大佬你设置成了 ARGB_888, 按照那个 issue 中的判断使用 HARDWARE 调用 GPU 可能解决这个问题?

@SherlockGougou
Copy link
Owner

我测试过的,还是会卡顿

@HenryWu01
Copy link
Author

我测试过的,还是会卡顿

我去看了一下 Glide 的 issue,这貌似是一个 Glide 的问题?

@HenryWu01
Copy link
Author

bumptech/glide#4608

我测试过的,还是会卡顿

我去看了一下 Glide 的 issue,这貌似是一个 Glide 的问题?

@SherlockGougou
Copy link
Owner

SherlockGougou commented Dec 22, 2022 via email

@HenryWu01
Copy link
Author

嗯,glide中也有读取exif的流程。看这个issue至少一年了,好像也没解决方案。

不如换成 Coil 吧,貌似是个新起之秀。或者开放自定义图片加载库也是个好方法,现在手机厂商拍照默认就 HEIC,这个影响确实有点大了

@SherlockGougou
Copy link
Owner

SherlockGougou commented Dec 22, 2022 via email

@HenryWu01
Copy link
Author

自定义引擎这个我有计划,一直没时间弄,等🐏好了再说🥲 Henry Wu @.>于2022年12月22日 周四22:30写道:

嗯,glide中也有读取exif的流程。看这个issue至少一年了,好像也没解决方案。 不如换成 Coil 吧,貌似是个新起之秀。或者开放自定义图片加载库也是个好方法,现在手机厂商拍照默认就 HEIC,这个影响确实有点大了 — Reply to this email directly, view it on GitHub <#182 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEIXE2JM7JCVWY4AMGYUWFDWORQYRANCNFSM6AAAAAATDYAWH4 . You are receiving this because you commented.Message ID: @.
>

大佬注意安全啊,身体重要

@HenryWu01
Copy link
Author

我查了一些资料,我想到了一种可能的绕过方式。Glide 提供了自定义解码器的能力,阿里云刚好也有一个开源的解码器。如果集成这个 HEIF 解码器,而不使用安卓自带的解码器能否绕过这个问题?

阿里云的开源 HEIF 解码器: https://github.com/aliyun/heif-decoder-lib
阿里云的开源 HEIF 解码器文档: https://help.aliyun.com/document_detail/468071.html

@HenryWu01
Copy link
Author

HenryWu01 commented Dec 22, 2022

然后就是 Bitmap.Config.HARDWARE 是否需要被设置成默认 (不仅限于 HEIF,根据 Coil 的那个进行判断是否可以使用, 不然就 fallback 到 Bitmap.Config.ARGB_888 或者 Bitmap.Config.RGB_565)?

@HenryWu01
Copy link
Author

HenryWu01 commented Dec 24, 2022

我查了一些资料,我想到了一种可能的绕过方式。Glide 提供了自定义解码器的能力,阿里云刚好也有一个开源的解码器。如果集成这个 HEIF 解码器,而不使用安卓自带的解码器能否绕过这个问题?

阿里云的开源 HEIF 解码器: https://github.com/aliyun/heif-decoder-lib 阿里云的开源 HEIF 解码器文档: https://help.aliyun.com/document_detail/468071.html

尝试了一下没有效果,看了一下最后已缓存的图片图片是通过 subsampling-scale-image-view 加载的,这样就跟 Glide 没有关系了,是 SSIV 的问题。或许大佬可以看一下 tachiyomi 的这个 fork? 他们使用 c++ 写了一个 decoder。但是却少了一些东西像是EXIF_OREINTATION, image tiling

项目地址: https://github.com/tachiyomiorg/subsampling-scale-image-view
解码器地址: https://github.com/tachiyomiorg/image-decoder

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants