对于现在使用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,这也不起作用。
任何人都可以帮忙解决一下继续调试此问题的方法吗?我已经在这方面工作了大约一个星期,但收效甚微。
这是我看到的行为:
活动加载,图片在ViewPager中可见 - > FrameLayout - > TouchImageView。
ViewPager可以滑动和更改图像,但不会缩放缩放 处理第一或第二张图像。最终你到了一个位置 那个捏缩放可以工作。我无法弄清楚有什么不同。
如果您在滑动之前尝试捏缩放,则ViewPager滑动将无效, 并且需要多次滑动才能让ViewPager进行分页。
一旦你处于“工作位置”,滑动到页面的工作正常,如 以及缩放缩放和围绕缩放图像平移。在此之后,所有职位都有效。
答案 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内时,这不是必需的。
我当然感谢任何代码清理以及我们可以做什么。