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 nextAnimationIndex(AnimationType animationType, boolean isForwardRock) { return nextAnimationIndex(animationType, isForwardRock, animation.getCurrentIndex()); }
private int nextIndex() { return nextIndex(animation.getCurrentIndex()); }
private int previousIndex() { return previousIndex(animation.getCurrentIndex()); }