Поддержка crossfade
This commit is contained in:
parent
a3a20a05b5
commit
527207c824
@ -14,6 +14,8 @@ import android.os.SystemClock;
|
||||
*/
|
||||
public class TransitionAnimationDrawable extends LayerDrawable {
|
||||
|
||||
private static final Drawable NONE = new ColorDrawable();
|
||||
|
||||
private static final int TRANSITION_STARTING = 0;
|
||||
private static final int TRANSITION_RUNNING = 1;
|
||||
private static final int TRANSITION_NONE = 2;
|
||||
@ -26,6 +28,13 @@ public class TransitionAnimationDrawable extends LayerDrawable {
|
||||
private long startTime;
|
||||
private int currentDuration;
|
||||
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) {
|
||||
super(drawables);
|
||||
@ -80,7 +89,7 @@ public class TransitionAnimationDrawable extends LayerDrawable {
|
||||
}
|
||||
|
||||
if (done) {
|
||||
// getDrawable(fromIndex).draw(canvas);
|
||||
getDrawable(fromIndex).draw(canvas);
|
||||
getDrawable(toIndex).draw(canvas);
|
||||
if (state == TRANSITION_RUNNING) {
|
||||
if (toIndex < lastIndex) {
|
||||
@ -97,7 +106,9 @@ public class TransitionAnimationDrawable extends LayerDrawable {
|
||||
|
||||
// Рисуем подкладку
|
||||
Drawable d = getDrawable(fromIndex);
|
||||
if (crossFade) d.setAlpha(255 - alpha);
|
||||
d.draw(canvas);
|
||||
if (crossFade) d.setAlpha(255);
|
||||
|
||||
// Рисуем наложенное изображение с прозрачностью
|
||||
if (alpha > 0) {
|
||||
@ -109,9 +120,15 @@ public class TransitionAnimationDrawable extends LayerDrawable {
|
||||
if (!done) invalidateSelf();
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
public void setCrossFadeEnabled(boolean crossFade) {
|
||||
this.crossFade = crossFade;
|
||||
}
|
||||
|
||||
private static final Drawable NONE = new ColorDrawable();
|
||||
public boolean isCrossFadeEnabled() {
|
||||
return crossFade;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
|
||||
private int fullDuration;
|
||||
private final List<Integer> durations;
|
||||
|
Loading…
Reference in New Issue
Block a user