gpt4 book ai didi

java - 在 android canvas 中拖动旋转文本无法按预期工作

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

我在这里缺少一些东西,所以我希望你能分享一些关于我的信息。

我正在 Canvas 中绘制一些文本。为此,我有一个类 Word

public class Word {
private int x;
private int y;
private String text;
}

该应用允许用户旋转文本,我使用 onDraw 处理旋转

protected void onDraw(Canvas canvas) {
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.rotate(angle, centerX, centerY)
...
canvas.drawText(word.getText(), word.getX(), word.getY())
....
canvas.restore();
}

我遇到的问题是当用户拖动 Canvas 并且存在旋转集时。当 angle=0 时,运动按预期进行。

@Override
public boolean onTouchEvent(MotionEvent event) {
case MotionEvent.ACTION_DOWN:
initialX = (int) event.getX();
initialY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
int currentX = (int) event.getX();
int currentY = (int) event.getY();
int xMovement = currentX - initialX;
int yMovement = currentY - initialY;

dragWords(xMovement, yMovement);
.....

dragWords 上我做的每个词:

private void dragText(int xMovement, int yMovement){
for (Word word : words) {
word.setX(word.getX() + xMovement);
word.setY(word.getY() + yMovement);
}
invalidate();

当旋转角度为0时,上/下/左/右移动使文字移动相同的距离。随着角度变大,文字开始向不同的方向移动,例如在 60 时,它开始沿对角线向上移动,当 180 时,它只向上/向下移动,而不是向左/向右移动。

我想我需要根据角度计算某种差异并将其添加到 xMovement/yMovement...但我应该怎么做?

LE:这是一张关于它如何表现的图片: enter image description here蓝线是文本在拖动时的移动方式,而橙色是手指在屏幕上拖动的方式。当角度为0时效果很好,当角度增加时,它开始向左/右倾斜移动,而当角度更大时,它只上下移动,不响应左/右

最佳答案

如果我理解正确,问题是 Canvas.rotate() 不仅旋转文本方向,而且整个 Canvas 。因此,单词的 x-y 坐标也从指定的轴心点旋转。

为了配合拖动 Action ,可以使用Matrix为此,更具体地说 inverse matrix您用来旋转 Canvas 的那个。它将用于将单词的 x-y 坐标转换为其原始的旋转前位置。

例如,计算一次,并在 anglecenterXcenterY 发生变化时更新它。

// rotMatrix is the same operation applied on the canvas.
Matrix rotMatrix = new Matrix();
rotMatrix.postRotate(mAngle, centerX, centerY);

// Invert it to convert x, y to their transformed positions.
Matrix matrix = new Matrix();
rotMatrix.invert(matrix);

然后,在绘制每个单词时:

int wordX = ... 
int wordY = ...
String text = ...

float[] coords = new float[] { wordX, wordY };
matrix.mapPoints(coords);
canvas.drawText(text, coords[0], coords[1], paint);

关于java - 在 android canvas 中拖动旋转文本无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24938994/

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