我想在路径上创建移动箭头,如下所示:
怎么可能呢?
编辑:
我成功地以这种方式创建了这些移动箭头: 我把路径划分为相同的部分,在每个部分的开头我都放了一个箭头。然后定期更新所有箭头的位置,当它们结束时,我只是设置它们的位置开始。
移动我使用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。
答案 0 :(得分:0)
我会给出数据类。你需要用它们来画画。
您需要一个Position
类来保存箭头的位置,它将用于路径。它应该为特定存储提供double
类型的x和y访问权限,但也可以转换为int
类型的屏幕位置。
接下来,您将拥有Path
课程。它可能包含ArrayList<Position>
来包含路径。您可以使用这些点来绘制图形方法中的路径。
然后,你将拥有Arrow
课程。我建议给它一个不是Position
但不是double
的位置。此外,它应该有一个字段speed
。
每次更新都会加快定位速度。
出于绘图目的,您仍需要获取箭头的位置和方向。这将是一个包含字段Vector
和Position position
的课程double angle
。然后,您需要Path
,public Vector getVectorAt(double pos)
中的方法。此方法应采用Arrow
的position属性,并返回箭头所在且指向的Vector
。您可以使用返回来绘制它。
我计划在有机会的时候尝试这个,也许我会稍后更新一些来源。
至于设置线条中心的箭头,您可以尝试:
mxTransform.preTranslate(-bmSprite.getWidth()/2, -bmSprite.getHeight()/2);
而不是您使用Matrix.preTranslate(...)
的行。在没有整个用户类的情况下,我无法完全模仿你所拥有的东西,所以这可能不起作用。