panpf / zoomimage

ZoomImage is an gesture zoom viewing of images library specially designed for Compose Multiplatform and Android View. Supported scale, pan, locate, rotation, and super-large image subsampling.
Apache License 2.0
340 stars 19 forks source link

有办法切换图片的时候 保持原本的缩放和移动吗? #11

Closed leeManong closed 4 months ago

leeManong commented 11 months ago

想实现个效果,先展示的缩略图,用户双指放大后自动加载原图,能做到原图加载设置好后,还保持之前的缩放和移动吗?

panpf commented 11 months ago

这很难,因为有很多计算需要依赖 contentSize,也就是加载到内存的图片的尺寸,contentSize 改变了就必须要重置所有的缩放信息

你可以尝试将现在组件的源码复制一份,然后将 contentSize 设置为 和 containerSize 一样,看看效果

另外我想知道你是什么样的业务场景会有这样的需求

leeManong commented 11 months ago

场景就是,一开始用户点进去是这个图片的缩略图,清晰度不是很高,然后用户双指放大的时候,自动加载原图,然后无感替换缩略图,所以想要保持原本的缩放和移动,实现无感替换。 原图设置上去后,再手动修改缩放和偏移能实现不?

------------------ 原始邮件 ------------------ 发件人: "panpf/zoomimage" @.>; 发送时间: 2023年12月12日(星期二) 下午2:43 @.>; @.**@.>; 主题: Re: [panpf/zoomimage] 有办法切换图片的时候 保持原本的缩放和移动吗? (Issue #11)

这很难,因为有很多计算需要依赖 contentSize,也就是加载到内存的图片的尺寸,contentSize 改变了就必须要重置所有的缩放信息

你可以尝试将现在组件的源码复制一份,然后将 contentSize 设置为 和 containerSize 一样,看看效果

另外我想知道你是什么样的业务场景会有这样的需求

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

panpf commented 11 months ago

你的想法很难实现,你只能按我刚才说的办法试试了

leeManong commented 11 months ago

这个代码是可以保持前后两张图的 看上去没有区别的,直接用原来的transformState替换到新的上。 有个问题就是替换后,手指去触摸缩放时会不太对。 如果能提供个setImageNoReset()就好啦。

val value = binding.imageView.zoomable.transformState.value.copy()
            Glide.with(this)
                .load("http://:www....")
                .into(object :SimpleTarget<Drawable>(){
                    override fun onResourceReady(
                        resource: Drawable,
                        transition: Transition<in Drawable>?
                    ) {
                        Glide.with(this@MainActivity).load(resource).into(binding.imageView)
//                        binding.imageView.setImageDrawable(resource)
                        lifecycleScope.launch(Dispatchers.Main) {
                            delay(100)
                            binding.imageView.zoomable._transformState.value = value
                        }
                    }

                })