如何使旋转动画流畅?

时间:2013-11-20 09:13:21

标签: android animation rotation

我试图在RotateAnimation的帮助下在仪表上移动针图像。 我使用以下代码

mNeedleAnimation = new RotateAnimation(mTransformedDegree, mTransformedDegree + degreeToRotate,x, y);
mTransformedDegree += degreeToRotate;
mNeedleAnimation.setAnimationListener(this);
mNeedleAnimation.setDuration(200);
mNeedleAnimation.setFillEnabled(true);
mNeedleAnimation.setFillAfter(true);
mNeedle.startAnimation(mNeedleAnimation);

此代码的问题是针直接从1值跳到另一个值。但我希望针的运动顺畅。我还尝试将setInterPolator用作动画的线性,但它没有按预期工作。

任何人都可以帮助我吗?

更新针视图代码

final ViewTreeObserver viewTreeObserver = mNeedle.getViewTreeObserver();
viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() {

    @Override
    public boolean onPreDraw() 
    {
        mNeedleHeight= mNeedle.getHeight();
        mNeedleWidth = mNeedle.getWidth();

        return true;
    }           
});

2 个答案:

答案 0 :(得分:0)

您可以使用animation interporlators并实例化任何子类并将其设置为动画。

mNeedleAnimation.setInterpolator(new AccelerateDecelerateInterpolator());

答案 1 :(得分:0)

  

我这样做:

rotanim = new RotateAnimation(
                (float) (((currenspeed) * 360) / 180),
                (float) (((nextspeed) * 360) / 180),
                (float) imgNeedle.getWidth() / 2,
                (float) imgNeedle.getHeight());

        rotanim.reset();
        rotanim.setDuration(400);
        rotanim.setFillAfter(true);
        imgNeedle.startAnimation(rotanim);
  

它对我有用..