Поддержка crossfade

This commit is contained in:
Victor 2015-05-05 12:04:02 +03:00
parent a3a20a05b5
commit 527207c824

View File

@ -14,6 +14,8 @@ import android.os.SystemClock;
*/ */
public class TransitionAnimationDrawable extends LayerDrawable { public class TransitionAnimationDrawable extends LayerDrawable {
private static final Drawable NONE = new ColorDrawable();
private static final int TRANSITION_STARTING = 0; private static final int TRANSITION_STARTING = 0;
private static final int TRANSITION_RUNNING = 1; private static final int TRANSITION_RUNNING = 1;
private static final int TRANSITION_NONE = 2; private static final int TRANSITION_NONE = 2;
@ -26,6 +28,13 @@ public class TransitionAnimationDrawable extends LayerDrawable {
private long startTime; private long startTime;
private int currentDuration; private int currentDuration;
private int fromIndex, toIndex; private int fromIndex, toIndex;
private boolean crossFade;
public TransitionAnimationDrawable(int duration, Drawable drawable1, Drawable drawable2) {
this(duration, new int[] {0, duration}, new Drawable[] {
drawable1 == null ? NONE : drawable1,
drawable2 == null ? NONE : drawable2 });
}
public TransitionAnimationDrawable(int fullDuration, int[] durations, Drawable[] drawables) { public TransitionAnimationDrawable(int fullDuration, int[] durations, Drawable[] drawables) {
super(drawables); super(drawables);
@ -80,7 +89,7 @@ public class TransitionAnimationDrawable extends LayerDrawable {
} }
if (done) { if (done) {
// getDrawable(fromIndex).draw(canvas); getDrawable(fromIndex).draw(canvas);
getDrawable(toIndex).draw(canvas); getDrawable(toIndex).draw(canvas);
if (state == TRANSITION_RUNNING) { if (state == TRANSITION_RUNNING) {
if (toIndex < lastIndex) { if (toIndex < lastIndex) {
@ -97,7 +106,9 @@ public class TransitionAnimationDrawable extends LayerDrawable {
// Рисуем подкладку // Рисуем подкладку
Drawable d = getDrawable(fromIndex); Drawable d = getDrawable(fromIndex);
if (crossFade) d.setAlpha(255 - alpha);
d.draw(canvas); d.draw(canvas);
if (crossFade) d.setAlpha(255);
// Рисуем наложенное изображение с прозрачностью // Рисуем наложенное изображение с прозрачностью
if (alpha > 0) { if (alpha > 0) {
@ -109,10 +120,16 @@ public class TransitionAnimationDrawable extends LayerDrawable {
if (!done) invalidateSelf(); if (!done) invalidateSelf();
} }
public void setCrossFadeEnabled(boolean crossFade) {
this.crossFade = crossFade;
}
public boolean isCrossFadeEnabled() {
return crossFade;
}
public static class Builder { public static class Builder {
private static final Drawable NONE = new ColorDrawable();
private int fullDuration; private int fullDuration;
private final List<Integer> durations; private final List<Integer> durations;
private final List<Drawable> drawables; private final List<Drawable> drawables;