在ViewPager / FrameLayout下触摸缩放

时间:2012-08-31 17:23:38

标签: android imageview android-imageview android-framelayout pinchzoom

对于现在使用Mike Ortiz's TouchImageView和自定义TouchViewPager的一些应用程序版本,我已经进行了相当大的缩放工作,因此它可以在视图寻呼机内工作。这非常有效 - TouchViewPager覆盖的唯一方法是onInterceptTouchEvent

public boolean onInterceptTouchEvent(MotionEvent ev) {
    TouchImageView view = getTouchView();
    if( null != view ){
        if( !view.isAtLimit() && view.getCurrentScale() > 1){
            return false;
        } else {
            Log.v(TAG, "View limit = " + view.isAtLimit());
            Log.v(TAG, "View scale = " + view.getCurrentScale());
        }
    }

    return super.onInterceptTouchEvent(ev);
}

最近,我们创建了一个扩展FrameLayout的新视图,并管理从互联网下载位图。当位图下载正在进行时,此布局显示ProgressBar,然后在准备好后添加TouchImageView。在视觉上,这似乎工作 - 我们看到一个ProgressBar,然后TouchImageView加载 - 但触摸得到搞砸,通常只是不一致。

我尝试将onTouchEvent从进度图像视图委托给触摸图像视图 - 没有运气。我也尝试在进度图像视图中重写onInterceptTouchEvent以始终返回false,这也不起作用。

任何人都可以帮忙解决一下继续调试此问题的方法吗?我已经在这方面工作了大约一个星期,但收效甚微。

这是我看到的行为:

  1. 活动加载,图片在ViewPager中可见 - > FrameLayout - > TouchImageView。

  2. ViewPager可以滑动和更改图像,但不会缩放缩放 处理第一或第二张图像。最终你到了一个位置 那个捏缩放可以工作。我无法弄清楚有什么不同。

  3. 如果您在滑动之前尝试捏缩放,则ViewPager滑动将无效, 并且需要多次滑动才能让ViewPager进行分页。

  4. 一旦你处于“工作位置”,滑动到页面的工作正常,如 以及缩放缩放和围绕缩放图像平移。在此之后,所有职位都有效。

1 个答案:

答案 0 :(得分:2)

奇怪的是,通过在TouchImageView类中实现重置方法,我能够正常工作:

public void resetZoom() {
    Matrix imageMatrix = getImageMatrix();
    RectF drawableRect = new RectF(0, 0, bmWidth, bmHeight);
    RectF viewRect = new RectF(0, 0, getWidth(), getHeight());

    imageMatrix.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);

    matrix = imageMatrix;
    setImageMatrix(matrix);

    fitAndCenterView();

    invalidate();
}

此方法在调用时重置图像上的缩放 - 当我们在framelayout调用内设置图像时,会设置所有内容。奇怪的是,当图像不在FrameLayout内时,这不是必需的。

我当然感谢任何代码清理以及我们可以做什么。