Java 在路径上移动对象

Java 在路径上移动对象,java,android,path,android-canvas,Java,Android,Path,Android Canvas,我想在路径上创建移动箭头,如下所示: 怎么可能呢 编辑: 我通过以下方式成功地创建了这些移动箭头: 我把路径分成了相同的部分,在每个部分的开头我都放了一个箭头。然后,所有箭头的位置都会定期更新,当它们结束时,我只是将它们的位置设置为开始 移动我使用实现的箭头。现在的问题是我想把箭放在路中间,而不是在它上面或下面。怎么可能呢 这是onDraw方法: @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(bmB

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

怎么可能呢

编辑:

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

移动我使用实现的箭头。现在的问题是我想把箭放在路中间,而不是在它上面或下面。怎么可能呢

这是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;
    }
}
@覆盖
受保护的void onDraw(画布){
drawBitmap(bmBackground、rSrc、rDest、null);
画布.绘图路径(ptCurve,paint);
//给精灵设置动画
矩阵mxTransform=新矩阵();

如果(iCurStep我将给出数据类。您需要使用它们来绘制

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

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

然后,您将拥有
箭头
类。我建议给它一个位置,而不是键入
位置
,而是如果
双击
。此外,它应该有一个字段
速度
。 在每次更新时,将速度添加到位置

出于绘图目的,您仍然需要获取箭头的位置和方向。这将采用一个类
Vector
,该类具有字段
位置
双角度
。然后您需要在
路径
公共向量getVectorAt(双位置)中使用一个方法
。此方法应采用
箭头的位置属性
,并返回箭头所在和指向的
向量。您可以使用返回来绘制它

我计划在有机会的时候尝试一下,也许我以后会更新一些源代码


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

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

使用
Matrix.preTranslate(…)
代替您的行。如果没有整个用户类,我无法准确地模拟您的行,所以这可能不起作用。

你在用什么?我看到java和Android,但更具体地说是什么类?我重新编写了这个问题,现在它展示了对正在解决的问题的最低理解-可以再次打开吗?你说的不是上下,而是中间是什么意思?谢谢你的回答,如果你观看,你可以看到image实际上在这条线上,而不是居中(如果头部在这条线上,身体在这条线上,它就会居中)。在我发布的图片上,箭头在这条线上居中(但它很小,所以它在里面)。所以你的问题是,箭头在这条线上,但你想要它在中间?