使用陀螺仪反馈在屏幕上翻译ImageView会导致图像闪烁

时间:2016-02-05 02:58:37

标签: android animation imageview translate

我要做的是根据设备旋转的程度在屏幕上移动一个对象。在活动中,OnSensorChanged对我创建的对象(其属性包括我想要移动的ImageView)调用setPosition()方法。 setPosition方法是:

void setPosition(float degree) { //degree = total number of degrees the device has rotated
    float baseDegree = degree%360;
    TranslateAnimation transAm;

    if(baseDegree >= 0 && baseDegree < 90)
    {
        transAm = new TranslateAnimation(
                Animation.ABSOLUTE, 0,
                Animation.ABSOLUTE, 0,
                Animation.ABSOLUTE, this.y,
                Animation.ABSOLUTE, (float)(maxY) - ((baseDegree*maxX)/360)); //maxX = screenWidth
        transAm.setInterpolator(new LinearInterpolator());
        transAm.setFillAfter(true);
        //transAm.setFillEnabled(true); // I tried all of these solutions
        //transAm.setDuration(1);       // I found online, but none seemed
        //transAm.setRepeatCount(1);    // to work.
        this.y = (float)(maxY) - ((baseDegree*maxY)/90);
        this.image.startAnimation(transAm);
    }
}

注意MaxX是屏幕宽度,MaxY是屏幕高度。

问题是图像似乎在它应该出现的位置之间快速闪烁,并且在它应该到达的位置的大约1/4处闪烁。我不知道如何让它留在一个地方,并且不知道我是否可以快速地在图像上调用太多动画,所以我也对其他建议持开放态度。

谢谢!

1 个答案:

答案 0 :(得分:0)

这个问题只是一个错字。

Animation.ABSOLUTE, (float)(maxY) - ((baseDegree*maxX)/360)); 

应该刚刚

Animation.ABSOLUTE, (float)(maxY) - ((baseDegree*maxY)/90));