【问题标题】:Moving objects on path在路径上移动对象
【发布时间】:2013-08-26 23:26:50
【问题描述】:

我想在路径上创建移动箭头,如下所示:

怎么可能?

编辑:

我以这种方式成功创建了这些移动箭头: 我将路径划分为相同的部分,并在每个部分的开头放置了一个箭头。然后所有箭头的位置都会定期更新,当它们结束时,我只是将它们的位置设置为开始。

移动我使用this example of moving object along path 实现的箭头。现在的问题是我想让箭头在路径的中间,而不是在它的上方或下方。怎么可能?

这是 onDraw 方法:

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawBitmap(bmBackground, rSrc, rDest, null);
    canvas.drawPath(ptCurve, paint);
    //animate the sprite
    Matrix mxTransform = new Matrix();
    if (iCurStep <= iMaxAnimationStep) {
        pm.getMatrix(fSegmentLen * iCurStep, mxTransform,
                PathMeasure.POSITION_MATRIX_FLAG + PathMeasure.TANGENT_MATRIX_FLAG);
        mxTransform.preTranslate(-bmSprite.getWidth(), -bmSprite.getHeight());
        canvas.drawBitmap(bmSprite, mxTransform, null);

        iCurStep++; //advance to the next step
        invalidate();
    } else {
        iCurStep = 0;
    }
}

pm 是 PathMeasure。

【问题讨论】:

  • 你在用什么我看到 java 和 Android 但更具体的类是什么?
  • 我已经改写了这个问题,现在它表明了对正在解决的问题的最低限度的理解 - 请问可以再次打开它吗?
  • 不是上下,而是中间是什么意思?
  • 感谢大家的回复,如果你看this,你可以看到图像实际上是在线上而不是居中(如果头部在线上方,身体在下方,则居中)它)。在我发布的图片上,箭头位于那条线上(但它很小,所以它在里面)。
  • 所以你的问题是箭头骑在线的一边,但你希望它在中心?

标签: java android path android-canvas


【解决方案1】:

我会给出数据类。你需要用它们来画画。

您需要一个Position 类来代替箭头,并将其用于路径。它应该提供对 x 和 y 的 double 类型的访问以用于特定存储,但也可以转换为 int 类型以用于屏幕位置。

接下来,您将拥有 Path 类。它可能有一个ArrayList&lt;Position&gt; 来包含路径。您可以使用这些点来绘制线条,这些线条是图形方法中的路径。

然后,您将拥有 Arrow 类。我建议给它一个位置,而不是输入Position,但如果是double。此外,它应该有一个字段speed。 每次更新都会增加位置的速度。

出于绘图目的,您仍然需要获取箭头的位置和方向。这将采用一个类Vector,其中包含字段Position positiondouble angle。然后你需要Path, public Vector getVectorAt(double pos) 中的一个方法。此方法应采用Arrow 的位置属性并返回箭头所在和指向的Vector。你可以使用return来绘制它。

我打算在有机会的时候尝试一下,也许我稍后会更新它以获得一些来源。


至于将箭头设置在线条的中心,您可以尝试:

mxTransform.preTranslate(-bmSprite.getWidth()/2, -bmSprite.getHeight()/2);

而不是使用Matrix.preTranslate(...) 的行。如果没有整个用户类,我无法完全模拟你所拥有的,所以这可能行不通。

【讨论】:

    猜你喜欢
    • 2011-09-03
    • 2011-08-26
    • 2015-07-28
    • 1970-01-01
    • 2019-11-13
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多