private int nextAnimationIndex( AnimationType animationType, boolean isForwardRock, int currentIndex) { switch (animationType) { case LOOP: { return nextDisplayableIndex(); } case STOP: { return nextDisplayableIndex(); } case ROCK: { if ((isForwardRock && animation.getCurrentIndex() != animation.size()) || animation.getCurrentIndex() == 0) { return nextDisplayableIndex(); } return previousDisplayableIndex(); } default: { return 0; } } }
public void run() { isAnimating = true; animation.setAnimating(true); shouldLoop = true; AnimationPreferences preferences = animation.getPreferences(); while (shouldLoop) { if (Thread.interrupted()) { shouldLoop = false; break; } AnimationType animationType = preferences.getType(); try { long delay = preferences.getFrameDelay(); if (animation.getCurrentIndex() == animation.size() - 1 || (animationType == AnimationType.ROCK && animation.getCurrentIndex() == 0)) { delay = preferences.getLoopDelay(); if (animationType == AnimationType.STOP || preferences.getFrames() == 1) { shouldLoop = false; break; } } Thread.sleep(delay); } catch (InterruptedException exception) { shouldLoop = false; break; } animation.setCurrentIndex(nextAnimationIndex(animationType, isForwardRock)); if (animation.getCurrentIndex() == animation.size() - 1 || (animationType == AnimationType.ROCK && animation.getCurrentIndex() == 0)) { if (animationType == AnimationType.ROCK) { isForwardRock = !isForwardRock; } else { isForwardRock = true; } } } isAnimating = false; animation.setAnimating(false); }
private int nextIndex(int currentIndex) { int nextIndex = currentIndex + 1; if (nextIndex > animation.size() - 1) { nextIndex = 0; } return nextIndex; }
private int previousIndex(int currentIndex) { int previousIndex = currentIndex - 1; if (previousIndex < 0) { previousIndex = animation.size() - 1; } if (previousIndex < 0) { previousIndex = 0; } return previousIndex; }