Android,沿路径移动位图?

Ham*_*mid 2 animation android path bitmap

我想知道是否可以从路径中选择坐标以随时间绘制位图,例如,我有一个太阳图像,并且我希望随着时间的推移沿着弧形路径移动它.

有没有办法定义这样的路径,然后沿着它移动,这样我就不必在数学上计算它?

谢谢.

Edu*_*ard 10

是的,可以沿路径移动图像.我将提供简单的解决方案来展示原理.以下代码将移动并旋转图像.如果您不需要旋转,请删除TANGENT_MATRIX_FLAG标志.

import android.graphics.*;
//somewhere global
int iCurStep = 0;// current step

//don't forget to initialize
Path pathMoveAlong = new Path();
private static Bitmap bmImage = null;

@Override
protected void onDraw(Canvas canvas) {
    Matrix mxTransform = new Matrix();
    PathMeasure pm = new PathMeasure(pathMoveAlong, false);
    float fSegmentLen = pm.getLength() / 20;//20 animation steps

    if (iCurStep <= 20) {
        pm.getMatrix(fSegmentLen * iCurStep, mxTransform,
            PathMeasure.POSITION_MATRIX_FLAG + PathMeasure.TANGENT_MATRIX_FLAG);
        canvas.drawBitmap(bmImage, mxTransform, null);
        iCurStep++;
        invalidate();
    } else {
        iCurStep = 0;
    };
};
Run Code Online (Sandbox Code Playgroud)


Dil*_*P G 6

以下是我使用的动画师:

目的:沿路径“路径”移动视图“视图”

v21+:

ValueAnimator pathAnimator = ObjectAnimator.ofFloat(view, "x", "y", path)
Run Code Online (Sandbox Code Playgroud)

v11+:

ValueAnimator pathAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);

pathAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
float[] point = new float[2];

@Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float val = animation.getAnimatedFraction();
        PathMeasure pathMeasure = new PathMeasure(path, true);
        pathMeasure.getPosTan(pathMeasure.getLength() * val, point, null);
        view.setX(point[0]);
        view.setY(point[1]);
    }
});
Run Code Online (Sandbox Code Playgroud)

类似要求:https : //stackoverflow.com/a/30254715/4344057


Iul*_*urt 3

我正在考虑一种解决方案:

         _
       /   \
Run Code Online (Sandbox Code Playgroud)

如果您的弧具有这种形状(意味着小于半个圆并且水平放置),那么您可以迭代 x 值,并为此 x 获取路径上的 y。然后将位图移动到该位置。