如何在Android中旋转图像并在按下按钮时随机停止

时间:2015-11-02 12:41:19

标签: android random rotation imageview rotateanimation

我试图在我的Android应用程序中制作一个简单的财富之轮。这将是带有人名的圆形图像。当按下按钮下方的图像时,图像将开始旋转(围绕其中心)。需要在随机时间之后停止旋转,因此它并不总是与人的名字相同。现在我只使用1-2-3-4的图像,如下图所示。

Output example

我几乎看了几个关于此的话题,但是无法弄清楚如何让它随机。此刻它始终以相同的角度停止,例如总是在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高级分配!!!

1 个答案:

答案 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如果你想看看。这在我的模拟器上运行良好。