Поддержка crossfade
This commit is contained in:
parent
a3a20a05b5
commit
527207c824
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user