iielse / imageviewer

A simple and customizable Android full-screen image viewer 一个简单且可自定义的Android全屏图像浏览器
MIT License
2.23k stars 310 forks source link

针对超大图或超长图,可以使用subsampling-scale-image-view试一试 #27

Closed SherlockGougou closed 4 years ago

SherlockGougou commented 6 years ago

我写图片查看时也遇到过4096问题,且有时候的需求就是需要显示原始尺寸,不能压缩,所以寻求了这个轮子进行大图的区块加载:subsampling-scale-image-view,你可以参考参考

iielse commented 6 years ago

ImageWatcher 的实现原理 是 封装手势+属性动画,对加载图片没有特殊处理。

W/OpenGLRenderer: Bitmap too large to be uploaded into a texture一次性尝试加载超大图或超长图就会出现这个。 也就是楼主所说的4096问题。 我了解的 subsampling-scale-image-view 核心应该是 android.graphics.BitmapRegionDecoder 根据逻辑局部取出Bitmap然后重写了onDraw

现在由于实现差异略大,没有想到很好的办法能友好的展示超大图或超长图,所以对此功能需求明确的朋友,暂时慎用ImageWatcher。 唯一能安慰你的是,咱可以显示gif。

379548560 commented 6 years ago

所以如果加载超长图或者超大图的时候就不能用这个了么~~ @ielse

liweiGe commented 5 years ago

加载超长图显示不出来

iielse commented 4 years ago

我写图片查看时也遇到过4096问题,且有时候的需求就是需要显示原始尺寸,不能压缩 所以如果加载超长图或者超大图的时候就不能用这个了么 加载超长图显示不出来

interface Photo {
    fun id(): Long
    fun subsampling(): Boolean = false
}

重构了一次代码 超大图 的展示基于 subsampling-scale-image-view 被展示的数据需要实现Photo接口制定subsampling为true 则会使用SubsamplingScaleImageView展示图片