假设我在圆周上以Canvas
绘制了六个点,呈六边形。
我想同时在一个小的圆形路径中移动并重新绘制这六个点中的每一个 - 例如,每个点沿着圆的圆周移动,圆的半径是较大圆的半径的1/10。
我对如何使用Canvas
和onDraw
感到有点迷失,我不知道是否存在更好的解决方案。你会怎么做?
Some答案至少指出了这一点,它显示了一个点如何沿着圆形路径移动,但我不知道如何在这种情况下实现它:
for (double t = 0; t < 2*Pi; t += 0.01)
{
x = R*cos(t) + x_0;
y = R*sin(t) + y_0;
}
谢谢!
答案 0 :(得分:0)
这是一种方法:
从扩展View
并覆盖onDraw
的自定义视图开始。使用Canvas
的绘图功能,您就在正确的轨道上。
为自定义视图提供一个字段来保存当前角度:
private float mTheta;
然后添加如下方法:
public void setTheta(float radians) {
mTheta = radians;
invalidate();
}
然后在onDraw
中,使用mTheta
的当前值来计算积分的位置。
当然,使用自定义视图,您可能需要使用onMeasure
覆盖来处理大小调整,并且可能需要使用onLayout
覆盖来处理某些布局。如果您将视图的尺寸设置为绝对dp
值,则默认行为应该适用于您。
这样做可以设置为覆盖onTouch
并允许用户互动来移动图形,或使用ValueAnimator
从0到2π循环调用setTheta
AnimatorUpdateListener
。
将一些代码放在一起,当你遇到困难时,发布另一个问题。如果您通过指向新问题的链接为此答案添加评论,我会看一下。