[英]How to rotate an image in Android and stop it randomly on button pressed
我試圖在我的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上停止。 我發現如果我更改動畫的持續時間,輸出將不一樣! 因此,我嘗試在持續時間內輸入一個隨機數,但那也不起作用。順便說一句,我檢查了其他帖子,說它是隨機的,但不是。
在理想情況下,動畫開始快速,然后放慢並停止。
感謝高級分配!!!
您可以嘗試以下方法:
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());
}
});
您也可以將插值器更改為其他值以獲得不同的效果。
編輯:編輯以解決僅第一轉超過一轉的問題。 請注意,這意味着旋轉值將很快變高! 不應該提出問題,但值得牢記。
如果您想看一看, 在這里進行 另一個編輯: 示例應用程序/源代碼 。 這在我的模擬器上運行良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.