gpt4 book ai didi

android - onScale 和 Canvas - 如何在缩放图像后调整原点?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:34 25 4
gpt4 key购买 nike

我有一个非常简单的带有自定义组件的测试应用 MyView.java - 显示可滚动和可缩放的图像(代表类似拼字游戏的文字游戏中的棋盘):

Nexus screenshot

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 点时,问题会变得更糟。

用语言描述问题有点困难,但是当你查看my test project from GitHub您会立即看到它(并且您始终可以双击以重置偏移量和比例)。

这可能是一个有标准解决方法的常见问题,但我还没有找到它。

董事会图片是CC BY-SA by Denelson83代码基于 How-to support the fling gesture with a bounce effect博客。

最佳答案

您将两次移动 Canvas :第一次使用 translate,然后使用 scale(sx,sy,px,py);

您可以在 onScale 中将焦点与偏移结合起来,然后使用 scale(sx,sy)

关于android - onScale 和 Canvas - 如何在缩放图像后调整原点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26609739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com