我有一个非常简单的测试应用程序,其中包含一个自定义组件MyView.java - 它显示一个可滚动和可扩展的图像(在类似 Scrabble 的文字游戏中表示一块板):
1)在我的比例监听器中,我调整比例因子:
public boolean onScale(ScaleGestureDetector detector) {
mScale *= detector.getScaleFactor();
// XXX how to adjust mOffsetX and mOffsetY ? XXX
constrainZoom();
constrainOffsets();
invalidate();
return true;
}
2)然后在我的自定义组件的绘图方法中应用平移和比例因子:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.translate(mOffsetX, mOffsetY);
canvas.scale(mScale, mScale);
gameBoard.setBounds(
0,
0,
gameBoard.getIntrinsicWidth(),
gameBoard.getIntrinsicHeight()
);
gameBoard.draw(canvas);
}
不幸的是,使用捏合手势缩放时似乎存在一个小错误 -
我可以看到,缩放后比例和边界的大小正确,但图像的偏移量不是。
当捏合手势的焦点远离屏幕的 0、0 点时,问题会变得更糟。
用语言来描述这个问题有点困难,但是当你从 GitHub 上查看我的测试项目时,你会立即看到它(你总是可以双击来重置偏移量和比例)。
这可能是使用标准方法解决它的常见问题,但我还没有找到它。
电路板图像是Denelson83 的 CC BY-SA,代码基于How-to support the fling gesture with abounce effect blog。