iielse / imageviewer

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

长图放大以后不能流畅的滑动哦 #12

Closed Zellerpooh closed 6 years ago

Zellerpooh commented 7 years ago

大图感觉可以把这个结合进去,可惜我太菜了,还不是完全看得懂你的代码 https://github.com/davemorrissey/subsampling-scale-image-view

Zellerpooh commented 7 years ago

给你留了张长图,你可以去试试 "http://share.fanjuer.cn/shiyongshuoming/shiyongshuoming.jpg"

iielse commented 7 years ago

代码没考虑这种情况,我看看吧, 最近比较忙。

iielse commented 7 years ago

image

这里有个图片缩放系数最大值设定 static final float MAX_SCALE = 3.8f;

你把这个值改大一点,改成10倍之类的。 @Zellerpooh 然后当图片缩放后的宽度超过了 屏幕宽度,就可以快乐的上下滑动了

iielse commented 7 years ago

ImageWatcher

onScroll() ...

if ("horizontal".equals(imageOrientation)) {
    float translateXEdge = vsDefault.width * (vsCurrent.scaleX - 1) / 2;
    if (vsCurrent.translationX >= translateXEdge && moveX > 0) {
        // 图片位于边界,且仍然尝试向边界外拽动。。转化为Slide手势,可以进行viewpager的翻页滑动
        mTouchMode = TOUCH_MODE_SLIDE;
    } else if (vsCurrent.translationX <= -translateXEdge && moveX < 0) {
        // 同上
        mTouchMode = TOUCH_MODE_SLIDE;
    }
} else if ("vertical".equals(imageOrientation)) {
    if (vsDefault.width * vsCurrent.scaleX <= mWidth) {
        // 同上
        mTouchMode = TOUCH_MODE_SLIDE;    【走这里了】
    } else {
        float translateXRightEdge = vsDefault.width * vsCurrent.scaleX / 2 - vsDefault.width / 2;
        float translateXLeftEdge = mWidth - vsDefault.width * vsCurrent.scaleX / 2 - vsDefault.width / 2;
        if (vsCurrent.translationX >= translateXRightEdge && moveX > 0) {
            // 同上
            mTouchMode = TOUCH_MODE_SLIDE;
        } else if (vsCurrent.translationX <= translateXLeftEdge && moveX < 0) {
            // 同上
            mTouchMode = TOUCH_MODE_SLIDE;
        }
    }
}

竖直长图正在展现的时刻状态,宽度没有满一屏幕,事件直接都丢给了 ViewPager。这里进一步要优化的话,应该是左右滑动事件给ViewPager, 上下事件作用ImageView本身。 哎,