Активация случайной анимации
Всем привет! Подскажите, пожалуйста, можно как-то лучше сделать рандомный выбор анимации, чем у меня в примере? Так то оно работает, но может есть более лучшее решение?
public void BT1(View view) {
final Animation a0 = AnimationUtils.loadAnimation(this, R.anim.anim_translate);
final Animation a1 = AnimationUtils.loadAnimation(this, R.anim.anim_left);
final Animation a2 = AnimationUtils.loadAnimation(this, R.anim.visibleright);
final int rand = (int) ( Math.random() * 3 );
switch (rand){
case 0:
bt1.startAnimation(a0);
break;
case 1:
bt1.startAnimation(a1);
break;
case 2:
bt1.startAnimation(a2);
break;
}
fromButton = (String) bt1.getText();
Validate();
}
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Ваш способ хорош, я могу предложить такой способ - складываем все анимации в массив, и рандомно берем любой элемент массива. Будет что-то типа такого:
ArrayList<Animation> animArray = new ArrayList<Animation>();
animArray.add(a0);
animArray.add(a1);
animArray.add(a2);
и дальше получаем элемент:
Random random = new Random();
for(int i=0; i < animArray.size(); i++){
animArray.get(random.nextInt(animArray.size()) )
}
Либо второй вариант:
int randomIndex = (int) (Math.random() * animArray.size());
animArray.get(randomIndex);
Третий вариант:
int randomIndex = ThreadLocalRandom.current().nextInt(animArray.size());
animArray.get(randomIndex);
Четвертый вариант:
Collections.shuffle(animArray);
for(Animation anim: animArray)
Log.i(MY_TAG, anim);
Все случаи выше не требуют вводить кол-во в рандоме. Для этого мы будем получать размер массива. Вот примеры получения рандомного индекса из массива.