我试图在我的Android应用程序中制作一个简单的财富之轮。这将是带有人名的圆形图像。当按下按钮下方的图像时,图像将开始旋转(围绕其中心)。需要在随机时间之后停止旋转,因此它并不总是与人的名字相同。现在我只使用1-2-3-4的图像,如下图所示。
我几乎看了几个关于此的话题,但是无法弄清楚如何让它随机。此刻它始终以相同的角度停止,例如总是在1号。
我有代码的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_who, container, false);
final ImageView alberto = (ImageView)view.findViewById(R.id.alberto);
Button spin =(Button)view.findViewById(R.id.spin);
final RotateAnimation anim = new RotateAnimation(0f,generateRandomNumber(), Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
anim.setFillAfter(true);
anim.setDuration(1000);
spin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alberto.startAnimation(anim);
}
});
return view;
}
public float generateRandomNumber() {
Random rand = new Random();
int randomNum = rand.nextInt((360 - 0) + 1);
return (float)randomNum;
}
}
所以基本上我给RotateAnimation一个随机数,所以它在停止旋转的地方并不总是一样。但这不起作用,因为我说它总是停在nr 1例如。我想通了如果我改变动画的持续时间,输出就不一样了!因此我尝试在持续时间中输入一个随机数,但那不起作用as.btw我已经检查过其他帖子说它是随机但不是。
在理想情况下,动画会快速启动并减速并停止。
Thanx高级分配!!!
答案 0 :(得分:0)
您可以尝试以下方法:
private static final float BASE_ROTATION_DEGREES = 3600;
private static final int DURATION = 1000;
//...
spin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
float deg = alberto.getRotation() + BASE_ROTATION_DEGREES + ((float)Math.random() * 360F);
alberto.animate().rotation(deg).setDuration(DURATION)
.setInterpolator(new AccelerateDecelerateInterpolator());
}
});
您可以将插补器更改为其他内容以获得不同的效果。
编辑:编辑以解决问题,即只有第一次旋转超过一次旋转。请注意,这意味着旋转值会很快变高!不应该提出问题,但值得记住。
另一个编辑: Sample app/source code here如果你想看看。这在我的模拟器上运行良好。