我有一个非常简单的测试应用程序,其自定义组件
MyView.java – 显示可滚动和可缩放的图像(代表类似拼字游戏的文字游戏中的棋盘):
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点时,问题变得更糟.
用文字描述这个问题有点困难,但是当您查看my test project from GitHub时,您会立即看到它(并且您可以随时双击以重置偏移和比例).
这可能是解决它的标准方法的常见问题,但我还没有找到它.