我想知道是否可以从路径中选择坐标以随时间绘制位图,例如,我有一个太阳的图像,我想随着时间的推移沿着弧形路径移动它
有没有办法定义这样的路径,然后沿着它移动,这样我就不用数学计算它了?
感谢。
答案 0 :(得分: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;
};
};
答案 1 :(得分:4)
以下是我使用的动画师:
目的:移动视图&#34;查看&#34;沿着路径&#34;路径&#34;
V21 +:
ValueAnimator pathAnimator = ObjectAnimator.ofFloat(view, "x", "y", path)
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]);
}
});
的类似要求
答案 2 :(得分:2)
我在想一个解决方案:
_ / \
如果您的弧具有这种形状(意味着不到半个圆并且位于水平位置),那么您可以迭代x值,并且对于x获取路径上的y。然后将位图移动到该位置。