package com.florianmski.tracktoid.ui.widgets; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.PixelFormat; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; public class CrossFadeDrawable extends Drawable { private final static float BEFORE = -1f, CURRENT = 0f, AFTER = 1f; private Drawable drawableCurrent, drawableNext; private float positionOffset = 0f; public CrossFadeDrawable() { drawableCurrent = new ColorDrawable(Color.GREEN); drawableNext = new ColorDrawable(Color.BLUE); } // -1 -> before // 0 -> current // 1 -> after public void setPositionOffset(float positionOffset) { this.positionOffset = positionOffset; invalidateSelf(); } public void setBefore(Drawable drawableBefore) { //this.drawableBefore = drawableBefore; } public void setCurrent(Drawable drawableCurrent) { //this.drawableCurrent = drawableCurrent; } public void setAfter(Drawable drawableAfter) { //this.drawableAfter = drawableAfter; } @Override public void draw(Canvas canvas) { if(drawableCurrent == null) return; int alpha = (int) (Math.abs(positionOffset) * 255); boolean done = (alpha == 0 || alpha == 255); if(done) { if(positionOffset == CURRENT) drawableCurrent.draw(canvas); else drawableNext.draw(canvas); return; } drawableCurrent.draw(canvas); setDrawableAlpha(canvas, drawableNext, alpha); //canvas.drawColor(Color.GREEN); } private void setDrawableAlpha(Canvas canvas, Drawable d, int alpha) { if(d != null) { d.setAlpha(255 - alpha); d.draw(canvas); d.setAlpha(0xFF); } } @Override public void setAlpha(int alpha) {} @Override public void setColorFilter(ColorFilter cf) {} @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } // @Override // public int getIntrinsicWidth() // { // return drawableCurrent == null ? 0 : drawableCurrent.getIntrinsicWidth(); // } // // @Override // public int getIntrinsicHeight() // { // return drawableCurrent == null ? 0 : drawableCurrent.getIntrinsicHeight(); // } }