在路径上移动对象

时间:2013-08-23 19:54:01

标签: java android path android-canvas

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

moving arrows

怎么可能呢?

编辑:

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

移动我使用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。

1 个答案:

答案 0 :(得分:0)

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

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

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

然后,你将拥有Arrow课程。我建议给它一个不是Position但不是double的位置。此外,它应该有一个字段speed。 每次更新都会加快定位速度。

出于绘图目的,您仍需要获取箭头的位置和方向。这将是一个包含字段VectorPosition position的课程double angle。然后,您需要Pathpublic Vector getVectorAt(double pos)中的方法。此方法应采用Arrow的position属性,并返回箭头所在且指向的Vector。您可以使用返回来绘制它。

我计划在有机会的时候尝试这个,也许我会稍后更新一些来源。


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

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

而不是您使用Matrix.preTranslate(...)的行。在没有整个用户类的情况下,我无法完全模仿你所拥有的东西,所以这可能不起作用。