am e1352de6: Merge "Setup the animation callback for AnimatedVectorDrawable" into mnc-dev
* commit 'e1352de673423264c00c71c0ec1597bbdad6fd03': Setup the animation callback for AnimatedVectorDrawable
This commit is contained in:
@@ -12166,24 +12166,36 @@ package android.graphics.drawable {
|
||||
method public abstract void stop();
|
||||
}
|
||||
|
||||
public abstract interface Animatable2 implements android.graphics.drawable.Animatable {
|
||||
method public abstract void clearAnimationCallbacks();
|
||||
method public abstract void registerAnimationCallback(android.graphics.drawable.Animatable2.AnimationCallback);
|
||||
method public abstract boolean unregisterAnimationCallback(android.graphics.drawable.Animatable2.AnimationCallback);
|
||||
}
|
||||
|
||||
public static abstract class Animatable2.AnimationCallback {
|
||||
ctor public Animatable2.AnimationCallback();
|
||||
method public void onAnimationEnd(android.graphics.drawable.Drawable);
|
||||
method public void onAnimationStart(android.graphics.drawable.Drawable);
|
||||
}
|
||||
|
||||
public class AnimatedStateListDrawable extends android.graphics.drawable.StateListDrawable {
|
||||
ctor public AnimatedStateListDrawable();
|
||||
method public void addState(int[], android.graphics.drawable.Drawable, int);
|
||||
method public void addTransition(int, int, T, boolean);
|
||||
}
|
||||
|
||||
public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable {
|
||||
public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
|
||||
ctor public AnimatedVectorDrawable();
|
||||
method public void addListener(android.animation.Animator.AnimatorListener);
|
||||
method public void clearAnimationCallbacks();
|
||||
method public void draw(android.graphics.Canvas);
|
||||
method public java.util.List<android.animation.Animator.AnimatorListener> getListeners();
|
||||
method public int getOpacity();
|
||||
method public boolean isRunning();
|
||||
method public void removeListener(android.animation.Animator.AnimatorListener);
|
||||
method public void registerAnimationCallback(android.graphics.drawable.Animatable2.AnimationCallback);
|
||||
method public void setAlpha(int);
|
||||
method public void setColorFilter(android.graphics.ColorFilter);
|
||||
method public void start();
|
||||
method public void stop();
|
||||
method public boolean unregisterAnimationCallback(android.graphics.drawable.Animatable2.AnimationCallback);
|
||||
}
|
||||
|
||||
public class AnimationDrawable extends android.graphics.drawable.DrawableContainer implements android.graphics.drawable.Animatable java.lang.Runnable {
|
||||
|
||||
@@ -12479,24 +12479,36 @@ package android.graphics.drawable {
|
||||
method public abstract void stop();
|
||||
}
|
||||
|
||||
public abstract interface Animatable2 implements android.graphics.drawable.Animatable {
|
||||
method public abstract void clearAnimationCallbacks();
|
||||
method public abstract void registerAnimationCallback(android.graphics.drawable.Animatable2.AnimationCallback);
|
||||
method public abstract boolean unregisterAnimationCallback(android.graphics.drawable.Animatable2.AnimationCallback);
|
||||
}
|
||||
|
||||
public static abstract class Animatable2.AnimationCallback {
|
||||
ctor public Animatable2.AnimationCallback();
|
||||
method public void onAnimationEnd(android.graphics.drawable.Drawable);
|
||||
method public void onAnimationStart(android.graphics.drawable.Drawable);
|
||||
}
|
||||
|
||||
public class AnimatedStateListDrawable extends android.graphics.drawable.StateListDrawable {
|
||||
ctor public AnimatedStateListDrawable();
|
||||
method public void addState(int[], android.graphics.drawable.Drawable, int);
|
||||
method public void addTransition(int, int, T, boolean);
|
||||
}
|
||||
|
||||
public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable {
|
||||
public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
|
||||
ctor public AnimatedVectorDrawable();
|
||||
method public void addListener(android.animation.Animator.AnimatorListener);
|
||||
method public void clearAnimationCallbacks();
|
||||
method public void draw(android.graphics.Canvas);
|
||||
method public java.util.List<android.animation.Animator.AnimatorListener> getListeners();
|
||||
method public int getOpacity();
|
||||
method public boolean isRunning();
|
||||
method public void removeListener(android.animation.Animator.AnimatorListener);
|
||||
method public void registerAnimationCallback(android.graphics.drawable.Animatable2.AnimationCallback);
|
||||
method public void setAlpha(int);
|
||||
method public void setColorFilter(android.graphics.ColorFilter);
|
||||
method public void start();
|
||||
method public void stop();
|
||||
method public boolean unregisterAnimationCallback(android.graphics.drawable.Animatable2.AnimationCallback);
|
||||
}
|
||||
|
||||
public class AnimationDrawable extends android.graphics.drawable.DrawableContainer implements android.graphics.drawable.Animatable java.lang.Runnable {
|
||||
|
||||
61
graphics/java/android/graphics/drawable/Animatable2.java
Normal file
61
graphics/java/android/graphics/drawable/Animatable2.java
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.graphics.drawable;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
|
||||
/**
|
||||
* Abstract class that drawables supporting animations and callbacks should extend.
|
||||
*/
|
||||
public interface Animatable2 extends Animatable {
|
||||
|
||||
/**
|
||||
* Adds a callback to listen to the animation events.
|
||||
*
|
||||
* @param callback Callback to add.
|
||||
*/
|
||||
void registerAnimationCallback(@NonNull AnimationCallback callback);
|
||||
|
||||
/**
|
||||
* Removes the specified animation callback.
|
||||
*
|
||||
* @param callback Callback to remove.
|
||||
* @return {@code false} if callback didn't exist in the call back list, or {@code true} if
|
||||
* callback has been removed successfully.
|
||||
*/
|
||||
boolean unregisterAnimationCallback(@NonNull AnimationCallback callback);
|
||||
|
||||
/**
|
||||
* Removes all existing animation callbacks.
|
||||
*/
|
||||
void clearAnimationCallbacks();
|
||||
|
||||
public static abstract class AnimationCallback {
|
||||
/**
|
||||
* Called when the animation starts.
|
||||
*
|
||||
* @param drawable The drawable started the animation.
|
||||
*/
|
||||
public void onAnimationStart(Drawable drawable) {};
|
||||
/**
|
||||
* Called when the animation ends.
|
||||
*
|
||||
* @param drawable The drawable finished the animation.
|
||||
*/
|
||||
public void onAnimationEnd(Drawable drawable) {};
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ package android.graphics.drawable;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorInflater;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.Animator.AnimatorListener;
|
||||
import android.annotation.NonNull;
|
||||
@@ -42,7 +43,6 @@ import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This class uses {@link android.animation.ObjectAnimator} and
|
||||
@@ -129,7 +129,7 @@ import java.util.List;
|
||||
* @attr ref android.R.styleable#AnimatedVectorDrawableTarget_name
|
||||
* @attr ref android.R.styleable#AnimatedVectorDrawableTarget_animation
|
||||
*/
|
||||
public class AnimatedVectorDrawable extends Drawable implements Animatable {
|
||||
public class AnimatedVectorDrawable extends Drawable implements Animatable2 {
|
||||
private static final String LOGTAG = "AnimatedVectorDrawable";
|
||||
|
||||
private static final String ANIMATED_VECTOR = "animated-vector";
|
||||
@@ -153,6 +153,10 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable {
|
||||
|
||||
private boolean mMutated;
|
||||
|
||||
/** Use a internal AnimatorListener to support callbacks during animation events. */
|
||||
private ArrayList<Animatable2.AnimationCallback> mAnimationCallbacks = null;
|
||||
private AnimatorListener mAnimatorListener = null;
|
||||
|
||||
public AnimatedVectorDrawable() {
|
||||
this(null, null);
|
||||
}
|
||||
@@ -380,36 +384,6 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a listener to the set of listeners that are sent events through the life of an
|
||||
* animation.
|
||||
*
|
||||
* @param listener the listener to be added to the current set of listeners for this animation.
|
||||
*/
|
||||
public void addListener(AnimatorListener listener) {
|
||||
mAnimatorSet.addListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a listener from the set listening to this animation.
|
||||
*
|
||||
* @param listener the listener to be removed from the current set of listeners for this
|
||||
* animation.
|
||||
*/
|
||||
public void removeListener(AnimatorListener listener) {
|
||||
mAnimatorSet.removeListener(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the set of {@link android.animation.Animator.AnimatorListener} objects that are currently
|
||||
* listening for events on this <code>AnimatedVectorDrawable</code> object.
|
||||
*
|
||||
* @return List<AnimatorListener> The set of listeners.
|
||||
*/
|
||||
public List<AnimatorListener> getListeners() {
|
||||
return mAnimatorSet.getListeners();
|
||||
}
|
||||
|
||||
private static class AnimatedVectorDrawableState extends ConstantState {
|
||||
int mChangingConfigurations;
|
||||
VectorDrawable mVectorDrawable;
|
||||
@@ -674,4 +648,77 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable {
|
||||
unscheduleSelf(what);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerAnimationCallback(@NonNull AnimationCallback callback) {
|
||||
if (callback == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add listener accordingly.
|
||||
if (mAnimationCallbacks == null) {
|
||||
mAnimationCallbacks = new ArrayList<>();
|
||||
}
|
||||
|
||||
mAnimationCallbacks.add(callback);
|
||||
|
||||
if (mAnimatorListener == null) {
|
||||
// Create a animator listener and trigger the callback events when listener is
|
||||
// triggered.
|
||||
mAnimatorListener = new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationStart(Animator animation) {
|
||||
ArrayList<AnimationCallback> tmpCallbacks = new ArrayList<>(mAnimationCallbacks);
|
||||
int size = tmpCallbacks.size();
|
||||
for (int i = 0; i < size; i ++) {
|
||||
tmpCallbacks.get(i).onAnimationStart(AnimatedVectorDrawable.this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
ArrayList<AnimationCallback> tmpCallbacks = new ArrayList<>(mAnimationCallbacks);
|
||||
int size = tmpCallbacks.size();
|
||||
for (int i = 0; i < size; i ++) {
|
||||
tmpCallbacks.get(i).onAnimationEnd(AnimatedVectorDrawable.this);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
mAnimatorSet.addListener(mAnimatorListener);
|
||||
}
|
||||
|
||||
// A helper function to clean up the animator listener in the mAnimatorSet.
|
||||
private void removeAnimatorSetListener() {
|
||||
if (mAnimatorListener != null) {
|
||||
mAnimatorSet.removeListener(mAnimatorListener);
|
||||
mAnimatorListener = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean unregisterAnimationCallback(@NonNull AnimationCallback callback) {
|
||||
if (mAnimationCallbacks == null || callback == null) {
|
||||
// Nothing to be removed.
|
||||
return false;
|
||||
}
|
||||
boolean removed = mAnimationCallbacks.remove(callback);
|
||||
|
||||
// When the last call back unregistered, remove the listener accordingly.
|
||||
if (mAnimationCallbacks.size() == 0) {
|
||||
removeAnimatorSetListener();
|
||||
}
|
||||
return removed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearAnimationCallbacks() {
|
||||
removeAnimatorSetListener();
|
||||
if (mAnimationCallbacks == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
mAnimationCallbacks.clear();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -14,10 +14,10 @@
|
||||
|
||||
package com.android.test.dynamic;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.Animator.AnimatorListener;
|
||||
import android.app.Activity;
|
||||
import android.graphics.drawable.Animatable2;
|
||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
@@ -56,22 +56,15 @@ public class AnimatedVectorDrawableTest extends Activity implements View.OnClick
|
||||
button.setHeight(400);
|
||||
button.setBackgroundResource(icon[i]);
|
||||
AnimatedVectorDrawable d = (AnimatedVectorDrawable) button.getBackground();
|
||||
d.addListener(new AnimatorListener() {
|
||||
@Override
|
||||
public void onAnimationStart(Animator animation) {
|
||||
d.registerAnimationCallback(new Animatable2.AnimationCallback() {
|
||||
@Override
|
||||
public void onAnimationStart(Drawable drawable) {
|
||||
Log.v(LOGCAT, "Animator start");
|
||||
}
|
||||
@Override
|
||||
public void onAnimationRepeat(Animator animation) {
|
||||
Log.v(LOGCAT, "Animator repeat");
|
||||
}
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
Log.v(LOGCAT, "Animator end");
|
||||
}
|
||||
@Override
|
||||
public void onAnimationCancel(Animator animation) {
|
||||
Log.v(LOGCAT, "Animator cancel");
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Drawable drawable) {
|
||||
Log.v(LOGCAT, "Animator end");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user