android 动画 路径,动画沿着自动旋转的路径,基于Android中的路径

如果要使用我的解决方案,您必须下载演示和

nineoldandroids和

these 4 java files的lib

这很简单,我修改了评估人员在9个演播室的演示.

在这里发帖太多了

只是为了得到这个想法:

我用扩展角扩展PathPoint.

然后将所有计算的点写入堆栈(一个简单的float [] [])

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

如果您不想使用堆栈,您可以修改timeparam,并期待下一个点的绘制位置,并计算出这些角度.

想想:

你先看看你要走的地方,然后走路,或者走路,然后选择目的地的角度.这不是必需的,因为我们的显示密度很高,并且计算每个像素的角度.

这是PathEvaluator

public class PathEvaluatorAngle implements TypeEvaluator {

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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值