对于现在使用 Mike Ortiz's TouchImageView 的几个应用程序版本,我的双指缩放效果很好。和一个自定义 TouchViewPager,以便它可以在 View 寻呼机中工作。这工作得很好 - 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 的新 View 并管理从互联网上下载位图。当位图下载正在进行时,此布局会显示 ProgressBar,然后在准备就绪后添加 TouchImageView。从视觉上看,这似乎可行——我们看到一个 ProgressBar,然后加载了 TouchImageView——但触摸变得一团糟,而且通常无法始终如一地工作。
我已经尝试将 onTouchEvent 从进度 ImageView 委托(delegate)给触摸 ImageView - 没有成功。我还尝试在进度 ImageView 中覆盖 onInterceptTouchEvent 以始终返回 false,但这也没有用。
任何人都可以提供一些关于在哪里继续调试此问题的想法吗?我已经为此工作了大约一个星期,但收效甚微。
这是我看到的行为:
Activity 加载,图像在 ViewPager -> FrameLayout -> TouchImageView 中可见。
ViewPager 可以滑动和更改图像,但双指缩放不能 处理第一张或第二张图片。最终你到达一个位置 捏缩放将起作用。我不知道有什么不同。
如果您确实尝试在滑动前捏合缩放,则 ViewPager 滑动将不起作用, 并且需要多次滑动才能让 ViewPager 进行分页。
一旦您处于“工作位置”,滑动到页面就可以正常工作,因为 以及捏缩放和平移缩放图像。在此之后所有职位都有效。
最佳答案
奇怪的是,我能够通过在 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 中时不需要这样做。
我当然会感谢任何代码清理以及我们可以做的其他事情。
关于android - 在 ViewPager/FrameLayout 下触摸缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12219934/