gpt4 book ai didi

android - 基于android路径的自动旋转路径动画

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:47:14 26 4
gpt4 key购买 nike

我一直在尝试在 android 2.2 版

中为一只苍蝇的图像制作动画,该图像在如下图的路径中移动(我添加它是为了让想法更清晰)

好吧,这可以在 iphone 中以非常简单的方式完成,因为它们有一个属性可以在使用绘制路径后设置此自动旋转

animation.rotationMode = kCAAnimationRotateAuto;

我相信这会根据路径旋转对象`

Fly path

我可以使用 nineoldandroid 为马飞过这条路径制作动画。使用方法的库

 path.moveTo(float x, float y);
path.lineTo(float x, float y);
path.curveTo(float c0X, float c0Y, float c1X, float c1Y, float x, float y);

使得曲线通过三次贝塞尔曲线绘制。

现在我一直在尝试实现一些东西,让我的苍蝇沿着路径旋转,但我似乎无法到达任何地方。

请帮我出出主意!!! :( :(

最佳答案

你必须下载nineoldandroids的demo和lib和 these 4 java files如果你想使用我的解决方案

很简单,我在nineoldandroids的demo中修改了求值器。

这里写的太多了:

只是为了得到这个想法:

我用视场角扩展 PathPoint。然后把所有计算出来的Points写在一个stack里(一个简单的float[][])

在第一次计算之后,可以通过 atan 和堆栈中的最后 2 个点来计算角度。

如果您不想使用堆栈,您可以修改时间参数并期待下一个点的绘制位置并计算其中的角度。

想想看:你是先看你要走到哪里然后走路还是你只是走路然后选择目的地的角度。这不是必需的,因为我们有那么高的显示密度并计算每个像素的角度。

这是 PathEvaluator

public class PathEvaluatorAngle implements TypeEvaluator<PathPointAngle> {

private static final int POINT_COUNT = 5000;
private float[][] stack = new float[POINT_COUNT][2];
private int stackC = 0;

@Override
public PathPointAngle evaluate(float t, PathPointAngle startValue, PathPointAngle endValue) {
float x, y;
if (endValue.mOperation == PathPointAngle.CURVE) {
float oneMinusT = 1 - t;
x = oneMinusT * oneMinusT * oneMinusT * startValue.mX +
3 * oneMinusT * oneMinusT * t * endValue.mControl0X +
3 * oneMinusT * t * t * endValue.mControl1X +
t * t * t * endValue.mX;
y = oneMinusT * oneMinusT * oneMinusT * startValue.mY +
3 * oneMinusT * oneMinusT * t * endValue.mControl0Y +
3 * oneMinusT * t * t * endValue.mControl1Y +
t * t * t * endValue.mY;
} else if (endValue.mOperation == PathPointAngle.LINE) {
x = startValue.mX + t * (endValue.mX - startValue.mX);
y = startValue.mY + t * (endValue.mY - startValue.mY);
} else {
x = endValue.mX;
y = endValue.mY;
}

stack[stackC][0] = x;
stack[stackC][1] = y;

double angle;

if (stackC == 0){
angle = 0;
} else if (stackC >= POINT_COUNT){
throw new IllegalStateException("set the stack POINT_COUNT higher!");
} else {
angle = Math.atan(
(stack[stackC][1] - stack[stackC-1][1]) /
(stack[stackC][0] - stack[stackC-1][0])
) * 180d/Math.PI;
}
stackC++;
return PathPointAngle.moveTo(x, y, angle);
}

关于android - 基于android路径的自动旋转路径动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12406588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com