gpt4 book ai didi

android - canvas.translate 有什么作用?

转载 作者:IT王子 更新时间:2023-10-28 23:46:28 26 4
gpt4 key购买 nike

可以在此处找到示例 compass.java . Api here

最佳答案

即使几年前我第一次回答这个问题时,我也并不真正了解 Canvas 是如何转换的(如 translaterotate等)工作。我曾经认为 translate 移动了您正在绘制的东西。实际上,translate 移动整个坐标系。这具有移动您正在绘制的东西的预期效果。

在您的屏幕上,您似乎正在移动绘图:

Android Canvas.translate() method

实际发生的事情是将坐标系移动到 Canvas 上的新位置:

enter image description here

我首先在 (0,0) 处绘制树。然后我将坐标系的原点转换到 Canvas 上的其他位置。然后我再次在 (0,0) 处绘制树。这样我的绘图代码根本不需要改变任何东西。只有坐标系发生变化。

通常 (0,0) 位于 View 的左上方。执行 Canvas.translate 会将其移动到 View 的其他部分。

保存和恢复坐标系

您可以执行 save()restore() 来回到原来的坐标系。

// draw the tree the first time
canvas.drawBitmap(tree, 0, 0, mPaint);

// draw the tree the second time
canvas.save();
canvas.translate(dx, dy); // dx = change in x, dy = change in y
canvas.drawBitmap(tree, 0, 0, mPaint); // draw still thinks it is at (0,0)
canvas.restore(); // undo the translate

当您restore 时,绘图已经在 Canvas 上。恢复不会改变这一点。它只是将坐标系移回您保存时的位置。

为什么要翻译

请注意,您可以通过更改 draw 方法的 x,y 坐标来实现相同的效果:

// draw the tree the first time
canvas.drawBitmap(tree, x, y, mPaint);

// update the x,y coordinates
x += dx;
y += dy;

// draw the tree the second time
canvas.drawBitmap(tree, x, y, mPaint);

如果有数学背景,这可能更直观。但是,当您平移、旋转和缩放图像时,通常很容易保持绘图逻辑相同并仅转换 Canvas 。为每次抽奖重新计算 xy 可能会非常昂贵。

关于android - canvas.translate 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789813/

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