我要做的是根据设备旋转的程度在屏幕上移动一个对象。在活动中,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处闪烁。我不知道如何让它留在一个地方,并且不知道我是否可以快速地在图像上调用太多动画,所以我也对其他建议持开放态度。
谢谢!
答案 0 :(得分:0)
这个问题只是一个错字。
Animation.ABSOLUTE, (float)(maxY) - ((baseDegree*maxX)/360));
应该刚刚
Animation.ABSOLUTE, (float)(maxY) - ((baseDegree*maxY)/90));