2012-08-31 32 views
3

我已经使用Mike Ortiz's TouchImageView和一个自定义的TouchViewPager,以便它可以在视图寻呼机内工作的几个应用程序版本的捏到变焦工作相当不错。这是相当不错的了 - 这TouchViewPager覆盖的唯一方法是onInterceptTouchEvent在ViewPager/FrameLayout下触摸缩放

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. 一旦您处于“工作位置”,滑动到页面就可以正常工作,因为它可以缩放和平移缩放图像。所有职位工作后。

+0

如果你分享了更多的代码,它可能会有所帮助。 –

+0

你的'onInterceptTouchEvent()'函数对我来说工作得差不多:)你是如何实现'isAtLimit()'函数的? – Izydorr

+0

我实际上不再使用该代码,但我将getters添加到TouchImageView中以返回它的limitX和limitY布尔值。这就是我正在检查的内容。 –

回答

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中时,这不是必需的。

当然,我很欣赏任何代码清理和我们可以做的事情。