1

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

移动箭头

怎么可能做到?

编辑:

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

移动我使用沿路径移动对象的示例实现的箭头。现在的问题是我想让箭头在路径的中间,而不是在它的上方或下方。怎么可能做到?

这是 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

4

1 回答 1

0

我会给出数据类。您需要使用它们来绘制。

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

接下来,您将Path上课。它可能有一个ArrayList<Position>包含路径。您可以使用这些点来绘制作为图形方法中的路径的线。

然后,你就可以Arrow上课了。我建议给它一个位置,而不是 typePosition但 if double。此外,它应该有一个字段speed。在每次更新时增加位置的速度。

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

当我有机会时,我计划尝试这个,也许我稍后会更新它以获得一些来源。


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

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

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

于 2013-08-23T20:31:22.120 回答