package com.bdc.ociney.view; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.util.AttributeSet; import com.bdc.ociney.utils.FastBlurHelper; import com.squareup.picasso.Picasso; import com.squareup.picasso.RequestCreator; import com.squareup.picasso.Transformation; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MovingImageView extends KenBurnsView { Activity activity; List<String> urls = new ArrayList<String>(); int activeUrl = -1; boolean blur = false; int blurRadius = 60; MovingImageViewDelegate delegate = null; public MovingImageView(Context context) { super(context); } public MovingImageView(Context context, AttributeSet attrs) { super(context, attrs); } public MovingImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public static int couleurPrincipale(Bitmap image) { Bitmap onePixelBitmap = Bitmap.createScaledBitmap(image, 1, 1, true); return onePixelBitmap.getPixel(0, 0); } public void setDelegate(MovingImageViewDelegate delegate) { this.delegate = delegate; } public void refresh() { if (activeUrl >= 0 && activeImageView != null) { RequestCreator rq = Picasso.with(getContext()).load(urls.get(activeUrl)); if (blur) rq = rq.transform(new BlurTransformation()); rq.into(activeImageView); } } public MovingImageView activerBlur(int radius) { this.blurRadius = radius; this.blur = true; refresh(); return this; } public MovingImageView desactiverBlur() { this.blur = false; refresh(); return this; } public MovingImageView activerAnimations() { activerKenBurns = true; onResume(); return this; } public void changerCouleurActionBar(Bitmap image) { if (delegate != null) { int color = couleurPrincipale(image); int r = Color.red(color); int g = Color.green(color); int b = Color.blue(color); int a = 150; int newColor = Color.argb(a, r, g, b); int textColor = Color.WHITE; if (r > 200 && g > 200 && b > 200) textColor = Color.BLACK; delegate.changerActionBarColor(newColor, textColor); } } protected void fillImageViews() { } public void loadFromUrl(final Activity activity, String url) { this.loadFromUrls(activity, url, url); } public void loadFromUrls(final Activity activity, String... urls) { loadFromUrls(activity, Arrays.asList(urls)); } public void loadFromUrls(final Activity activity, List<String> urls) { this.activity = activity; this.urls = urls; onResume(); startKenBurnsAnimation(); swapImage(); } protected void swapImage() { if (this.urls != null && this.urls.size() > 0) { super.swapImage(); if (activeImageView != null) { activeUrl++; if (activeUrl >= this.urls.size()) activeUrl = 0; String newUrl = this.urls.get(activeUrl); if (newUrl != null) { RequestCreator rq = Picasso.with(getContext()).load(newUrl); if (blur) rq = rq.transform(new BlurTransformation()); rq.into(activeImageView); } } } } public interface MovingImageViewDelegate { public void changerActionBarColor(int color, int textColor); } public class BlurTransformation implements Transformation { @Override public Bitmap transform(Bitmap source) { changerCouleurActionBar(source); Bitmap result = FastBlurHelper.doBlur(source,blurRadius,false); if (result != source) { source.recycle(); } return result; } @Override public String key() { return "MovingImageView BlurTransformation" + blurRadius; } } }