使用RotateAnimation旋转ImageView在度数位置之间闪烁(Android)

时间:2016-01-26 20:44:26

标签: android imageview android-animation

我在旋转ImageView时遇到问题,让它保持指向正确的方向。本质上,ImageView是一个箭头,它应该始终指向屏幕的边缘或角落(由陀螺仪的设备程度决定),但它只是在不正确的位置之间闪烁。例如,如果指针从屏幕的右上角开始并指向该角落,则应该移动并指向屏幕顶部,xy位置将正确移动,但指针在指向之间反弹左上角和右上角。

要设置指针的位置我有:

public int pointerDegree = 0;
public void rotatePointerTo(int degree)
{
    if(degree==pointerDegree) //if it's already set to the degree it needs to be moved to
        return;
    final RotateAnimation rotate = new RotateAnimation(pointerDegree, degree,
            RotateAnimation.RELATIVE_TO_SELF, 0.5f,
            RotateAnimation.RELATIVE_TO_SELF, 0.5f);
    rotate.setInterpolator(new LinearInterpolator());
    rotate.setDuration(1);
    rotate.setFillEnabled(true);
    rotate.setFillAfter(true);
    pointer.startAnimation(rotate);
    pointerDegree = degree;
}

在OnSensorChanged函数中调用的内容如下:

 int baseDegree = (int)degree%360;
    if(baseDegree > -5 && baseDegree < 5)
        rotatePointerTo(-90);
    else if(baseDegree >= 5 && baseDegree <= 85)
        rotatePointerTo(0);
    else if(baseDegree > 85 && baseDegree < 95)
        rotatePointerTo(45);
    else if(baseDegree >= 95 && baseDegree <= 175)
        rotatePointerTo(90);
    else if(baseDegree > 175 && baseDegree < 185)
        rotatePointerTo(135);
    else if(baseDegree >= 185 && baseDegree <= 265)
        rotatePointerTo(180);

我知道当我调用rotatePointerTo()时,我使用的度数可能不正确 - 我只是用随机值填充它,而我试图找出闪烁的问题。

1 个答案:

答案 0 :(得分:0)

闪烁的问题可能就在这一行:

rotate.setDuration(1);

这意味着你只需要1毫秒的动画,这真的很短。

你可能意味着:

rotate.setRepeatCount(1);

表示您正在播放动画一次。

我建议你研究一下这个课程:ViewPropertyAnimator它非常简单直接,可以通过像你这样转动你的视图来节省很多你的RotateAnimation代码。 :

pointer.animate()
    .rotationBy(pointerDegree)
    .setInterpolator(new LinearInterpolator)
    .setDuration(100);

该类中有更多的rotationX和rotationY方法,请务必检查所有可用的方法。