َ Android椭圆轨道动画

时间:2019-05-05 22:29:09

标签: android animation

我正在用它在椭圆形路径中绕过一个视图,但是我的问题是,当视图到达中间时,速度会有所降低!

public class morbit extends Animation {

    @Override
    public boolean willChangeBounds() {
        return true;
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {

        float degg = interpolatedTime * 360;
        float angleDeg = (degg) % 360;
        double sino = Math.sin(degg * Math.PI / -180);
        sino= Math.abs(sino);
        double coso = Math.cos(degg * Math.PI / -180);
        coso= Math.abs(coso);

        double rrr = 40 + (sino * 150);

        float angleRad = (float) Math.toRadians(angleDeg);
        angleRad = angleRad;

        float y = (float) (40 * Math.cos(angleRad));
        float x = (float) (rrr * Math.sin(angleRad));

        t.getMatrix().setTranslate((float)x, (float)y);    
    }
}

。 。

morbit an = new morbit();
an.setDuration(6000);
an.setRepeatMode(Animation.INFINITE);
an.setRepeatCount(9999);
an.setInterpolator(new LinearInterpolator());

((ImageView) findViewById(R.id.dottx)).startAnimation(an);

我使用了LinearInterpolator,但对我没有帮助。

1 个答案:

答案 0 :(得分:1)

我希望您仍然不会陷入困境,但对于其他任何人,请尝试交换:

sino和coso for

select *  
from (
  select
    *,
    row_number() over(partition by row1 order by row3 desc) as rn
  from t
) x
where rn = 1

并将rrr交换为

double sino =Math.sin(Math.PI + 200);

double coso = Math.cos(Math.PI + 400);

我现在只是自己处理这个问题,所以我不确定interpolatedTime的用途是什么,尽管我猜测它可以确保动画均匀分布。没有它,我似乎没有任何问题,虽然也许是问题所在。