Hitomis / transferee

[暂停维护]一个帮助您完成从缩略视图到原视图无缝过渡转变的神奇框架
2.73k stars 390 forks source link

会导致原来的imageview出现异常 #92

Closed junchenChow closed 4 years ago

junchenChow commented 4 years ago
TransferConfig transferConfig = TransferConfig.build()
                    .setSourceImageList(imageMessageList)
                    .setProgressIndicator(new ProgressBarIndicator())
                    .setIndexIndicator(new NumberIndexIndicator())
                    .setJustLoadHitImage(true)
                    .bindImageView(imageView, imageMessageList);

            transferConfig.setNowThumbnailIndex(currentPosition);
            transferee.apply(transferConfig).show();

使用的是这种方式跳转查看大图,然后返回到原来的页面,之前点击的imageview问题就来了。 gif停止播放了 滑动的时候这个imageview的gif居然又动起来了 还偶尔会图片显示错乱。。。

junchenChow commented 4 years ago

自己这边代码确定没问题,是不是绑定的imageview过去之后做什么事情了

junchenChow commented 4 years ago

找到问题了。。。在EmptyThumState这个类里 把传过来的imageview的Drawable拿来用了 然后导致一系列问题。。

Hitomis commented 4 years ago

目前不支持gif图片的查看,预计看下个版本会支持。

junchenChow commented 4 years ago

好吧~ 还发现个问题,场景是一个聊天页面,进入之后是个recycleview 自动滚动到底部, 然后这个时候刚好末尾的position是个图片,点击之后就崩溃了,如果不是边界的下标点击可以正常查看图片。用的bindRecyclerView()的方式去查看的,用单个imageview方式就没有这个问题

Hitomis commented 4 years ago

是使用最新的代码么?这个问题很早之前就修复了。最好能贴一下报错信息

junchenChow commented 4 years ago

使用的master分支的最新代码。

@Override
    public TransferImage createTransferIn(final int position) {
        List<ImageView> originImageList = transfer.getTransConfig().getOriginImageList();
        ImageView originImage = originImageList.get(position > originImageList.size() - 1 ? originImageList.size() - 1 : position);

        ....
        return transImage;
    }

报的是空指针 originImage 拿出来的是个null ,我断点跟了一下,貌似在fillByRecyclerView()这个方法操作的。 createTransferIn(final int position)这一段代码我改了一点点加了个判断 原来的代码是直接用position去get 直接就下标越界崩了。。。难道是我使用有问题吗 我打断点看了我传来的数据 都正常的

Hitomis commented 4 years ago

你是不是那一组 RecyclerView 都在屏幕外不可见了,如果是这样的话,必须要重置transferee。因为这是屏幕外的,RecyclerView 的item都会被销毁掉,目标不都不存在了, transferee 拿什么去显示? 如果方便的话,你能贴个动图或者视频就好了,这样效率会高一点。

junchenChow commented 4 years ago

微信图片编辑_20191106173402 视频gif还是太慢了~ 就是点图里最底部的图片出的问题 我滑动到中间的话再去点 又没问题了

junchenChow commented 4 years ago

你说的没错,但是代码表现出来的情况感觉有点不一样

传进来的position = 14, originImageList经过fillByRecyclerView()一轮后size = 20,打断点看到这个originImageList里面只有下标19有值, 看起来没问题

看起来好像是我传入的初始position出了问题 T_T

Hitomis commented 4 years ago

哦,你这种情景类似qq相册功能,这种使用模式不要 bindRecyerView 你点那张图就bindImageView 直接绑定点的那张图。然后去设置setSourceImageList,这个集合包括现有的全部图片。如果下拉刷新,还要实时去setSourceImageList

如果你要 bindRecyerView ,你要自己去维护自己的的sourceImageList 和 position, 在点击图片的时候,实时更新,transferee 内部无法感知你图片数量的变化和 position 的变化,只能把你传进来的 sourceImageList 和 position作为依据。

junchenChow commented 4 years ago

嗯嗯 我是觉得绑定recycleview返回的时候可以对应位置 效果好看一点 感谢大神的回答 我现在用的bindImageView了 没啥问题了

Hitomis commented 4 years ago

gif 图片和长图,目前都完美支持了 @junchenChow

junchenChow commented 4 years ago

大概是哪几个类有修改呀 目前大佬你的代码我这边有在本地修改一部分源码去适配图片视频

Hitomis commented 4 years ago

这次改动的有点多,同时还修复了其他issues中提到的bug。 建议你直接全量替换。然后在这个基础上再添加你的修改