package com.novoda.magicmirror.sfx; import android.content.Context; import android.graphics.drawable.Drawable; import android.support.v7.app.ActionBar; import android.util.AttributeSet; import android.widget.FrameLayout; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; public class ParticlesLayout extends FrameLayout { private static final int PARTICLE_COUNT = 50; private final List<ParticleView> particleViews = new ArrayList<>(PARTICLE_COUNT); private ParticleEffectRunner runner; public ParticlesLayout(Context context, AttributeSet attrs) { super(context, attrs); } public void initialise() { for (int i = 0; i < PARTICLE_COUNT; i++) { ParticleView particleView = new ParticleView(getContext()); particleView.setLayoutParams(new ActionBar.LayoutParams(50, 50)); addView(particleView); particleViews.add(particleView); } } public void startParticles(Particle particle) { applyDrawableFrom(particle); runner = new ParticleEffectRunner(particle.getEffect(), particleViews, this); runner.startParticles(); } private void applyDrawableFrom(Particle particle) { Drawable drawable = getResources().getDrawable(particle.drawableResId()); for (ImageView particleView : particleViews) { particleView.setImageDrawable(drawable); } } public void stopParticles() { if (runner != null) { runner.stopAllParticles(); } } }