package com.novoda.magicmirror.sfx; import android.os.Handler; import android.view.View; import com.novoda.notils.logger.simple.Log; import java.util.ArrayList; import java.util.List; public class ParticleEffectRunner { private final ParticleEffect effect; private final List<ParticleView> particleViews; private final ParticlesLayout particlesLayout; private final Handler handler = new Handler(); private final List<Runnable> runnables = new ArrayList<>(); public ParticleEffectRunner(ParticleEffect effect, List<ParticleView> particleViews, ParticlesLayout particlesLayout) { this.effect = effect; this.particleViews = particleViews; this.particlesLayout = particlesLayout; } public void startParticles() { moveParticlesOutsideOfScreen(particleViews); for (int i = 0; i < particleViews.size(); i++) { ParticleRunnable particleRunnable = new ParticleRunnable(particlesLayout, particleViews.get(i), effect); int totalDelay = (i * effect.delayInBetween()); handler.postDelayed(particleRunnable, totalDelay); runnables.add(particleRunnable); } } private void moveParticlesOutsideOfScreen(List<ParticleView> particleViews) { for (View particleView : particleViews) { particleView.setY(-particleView.getHeight()); } } public void stopAllParticles() { stopAllRunningAnimations(); clearAllParticleQueue(); } private void clearAllParticleQueue() { for (Runnable runnable : runnables) { handler.removeCallbacks(runnable); } runnables.clear(); } private void stopAllRunningAnimations() { for (ParticleView particleView : particleViews) { Log.d("Stopping animation of: " + particleView); particleView.stopAnimation(); } } }