Fields Summary |
---|
private static final String | TAG |
public static final String | KEY_PACKAGE_NAMEThe package name that created the options. |
public static final String | KEY_ANIM_TYPEType of animation that arguments specify. |
public static final String | KEY_ANIM_ENTER_RES_IDCustom enter animation resource ID. |
public static final String | KEY_ANIM_EXIT_RES_IDCustom exit animation resource ID. |
public static final String | KEY_ANIM_IN_PLACE_RES_IDCustom in-place animation resource ID. |
public static final String | KEY_ANIM_THUMBNAILBitmap for thumbnail animation. |
public static final String | KEY_ANIM_START_XStart X position of thumbnail animation. |
public static final String | KEY_ANIM_START_YStart Y position of thumbnail animation. |
public static final String | KEY_ANIM_WIDTHInitial width of the animation. |
public static final String | KEY_ANIM_HEIGHTInitial height of the animation. |
public static final String | KEY_ANIM_START_LISTENERCallback for when animation is started. |
private static final String | KEY_TRANSITION_COMPLETE_LISTENERFor Activity transitions, the calling Activity's TransitionListener used to
notify the called Activity when the shared element and the exit transitions
complete. |
private static final String | KEY_TRANSITION_IS_RETURNING |
private static final String | KEY_TRANSITION_SHARED_ELEMENTS |
private static final String | KEY_RESULT_DATA |
private static final String | KEY_RESULT_CODE |
private static final String | KEY_EXIT_COORDINATOR_INDEX |
public static final int | ANIM_NONE |
public static final int | ANIM_CUSTOM |
public static final int | ANIM_SCALE_UP |
public static final int | ANIM_THUMBNAIL_SCALE_UP |
public static final int | ANIM_THUMBNAIL_SCALE_DOWN |
public static final int | ANIM_SCENE_TRANSITION |
public static final int | ANIM_DEFAULT |
public static final int | ANIM_LAUNCH_TASK_BEHIND |
public static final int | ANIM_THUMBNAIL_ASPECT_SCALE_UP |
public static final int | ANIM_THUMBNAIL_ASPECT_SCALE_DOWN |
public static final int | ANIM_CUSTOM_IN_PLACE |
private String | mPackageName |
private int | mAnimationType |
private int | mCustomEnterResId |
private int | mCustomExitResId |
private int | mCustomInPlaceResId |
private android.graphics.Bitmap | mThumbnail |
private int | mStartX |
private int | mStartY |
private int | mWidth |
private int | mHeight |
private android.os.IRemoteCallback | mAnimationStartedListener |
private android.os.ResultReceiver | mTransitionReceiver |
private boolean | mIsReturning |
private ArrayList | mSharedElementNames |
private android.content.Intent | mResultData |
private int | mResultCode |
private int | mExitCoordinatorIndex |
Methods Summary |
---|
public void | abort()
if (mAnimationStartedListener != null) {
try {
mAnimationStartedListener.sendResult(null);
} catch (RemoteException e) {
}
}
|
public static void | abort(android.os.Bundle options)
if (options != null) {
(new ActivityOptions(options)).abort();
}
|
public android.app.ActivityOptions | forTargetActivity()Return the filtered options only meant to be seen by the target activity itself
if (mAnimationType == ANIM_SCENE_TRANSITION) {
final ActivityOptions result = new ActivityOptions();
result.update(this);
return result;
}
return null;
|
public int | getAnimationType()
return mAnimationType;
|
public int | getCustomEnterResId()
return mCustomEnterResId;
|
public int | getCustomExitResId()
return mCustomExitResId;
|
public int | getCustomInPlaceResId()
return mCustomInPlaceResId;
|
public int | getExitCoordinatorKey() return mExitCoordinatorIndex;
|
public int | getHeight()
return mHeight;
|
public boolean | getLaunchTaskBehind()
return mAnimationType == ANIM_LAUNCH_TASK_BEHIND;
|
public android.os.IRemoteCallback | getOnAnimationStartListener()
return mAnimationStartedListener;
|
public java.lang.String | getPackageName()
return mPackageName;
|
public int | getResultCode() return mResultCode;
|
public android.content.Intent | getResultData() return mResultData;
|
public android.os.ResultReceiver | getResultReceiver() return mTransitionReceiver;
|
public java.util.ArrayList | getSharedElementNames()
return mSharedElementNames;
|
public int | getStartX()
return mStartX;
|
public int | getStartY()
return mStartY;
|
public android.graphics.Bitmap | getThumbnail()
return mThumbnail;
|
public int | getWidth()
return mWidth;
|
public boolean | isReturning()
return mIsReturning;
|
private static android.app.ActivityOptions | makeAspectScaledThumbnailAnimation(android.view.View source, android.graphics.Bitmap thumbnail, int startX, int startY, int targetWidth, int targetHeight, android.os.Handler handler, android.app.ActivityOptions$OnAnimationStartedListener listener, boolean scaleUp)
ActivityOptions opts = new ActivityOptions();
opts.mPackageName = source.getContext().getPackageName();
opts.mAnimationType = scaleUp ? ANIM_THUMBNAIL_ASPECT_SCALE_UP :
ANIM_THUMBNAIL_ASPECT_SCALE_DOWN;
opts.mThumbnail = thumbnail;
int[] pts = new int[2];
source.getLocationOnScreen(pts);
opts.mStartX = pts[0] + startX;
opts.mStartY = pts[1] + startY;
opts.mWidth = targetWidth;
opts.mHeight = targetHeight;
opts.setOnAnimationStartedListener(handler, listener);
return opts;
|
public static android.app.ActivityOptions | makeCustomAnimation(android.content.Context context, int enterResId, int exitResId)Create an ActivityOptions specifying a custom animation to run when
the activity is displayed.
return makeCustomAnimation(context, enterResId, exitResId, null, null);
|
public static android.app.ActivityOptions | makeCustomAnimation(android.content.Context context, int enterResId, int exitResId, android.os.Handler handler, android.app.ActivityOptions$OnAnimationStartedListener listener)Create an ActivityOptions specifying a custom animation to run when
the activity is displayed.
ActivityOptions opts = new ActivityOptions();
opts.mPackageName = context.getPackageName();
opts.mAnimationType = ANIM_CUSTOM;
opts.mCustomEnterResId = enterResId;
opts.mCustomExitResId = exitResId;
opts.setOnAnimationStartedListener(handler, listener);
return opts;
|
public static android.app.ActivityOptions | makeCustomInPlaceAnimation(android.content.Context context, int animId)Creates an ActivityOptions specifying a custom animation to run in place on an existing
activity.
if (animId == 0) {
throw new RuntimeException("You must specify a valid animation.");
}
ActivityOptions opts = new ActivityOptions();
opts.mPackageName = context.getPackageName();
opts.mAnimationType = ANIM_CUSTOM_IN_PLACE;
opts.mCustomInPlaceResId = animId;
return opts;
|
public static android.app.ActivityOptions | makeScaleUpAnimation(android.view.View source, int startX, int startY, int width, int height)Create an ActivityOptions specifying an animation where the new
activity is scaled from a small originating area of the screen to
its final full representation.
If the Intent this is being used with has not set its
{@link android.content.Intent#setSourceBounds Intent.setSourceBounds},
those bounds will be filled in for you based on the initial
bounds passed in here.
ActivityOptions opts = new ActivityOptions();
opts.mPackageName = source.getContext().getPackageName();
opts.mAnimationType = ANIM_SCALE_UP;
int[] pts = new int[2];
source.getLocationOnScreen(pts);
opts.mStartX = pts[0] + startX;
opts.mStartY = pts[1] + startY;
opts.mWidth = width;
opts.mHeight = height;
return opts;
|
public static android.app.ActivityOptions | makeSceneTransitionAnimation(Activity activity, android.view.View sharedElement, java.lang.String sharedElementName)Create an ActivityOptions to transition between Activities using cross-Activity scene
animations. This method carries the position of one shared element to the started Activity.
The position of sharedElement will be used as the epicenter for the
exit Transition. The position of the shared element in the launched Activity will be the
epicenter of its entering Transition.
This requires {@link android.view.Window#FEATURE_ACTIVITY_TRANSITIONS} to be
enabled on the calling Activity to cause an exit transition. The same must be in
the called Activity to get an entering transition.
return makeSceneTransitionAnimation(activity, Pair.create(sharedElement, sharedElementName));
|
public static android.app.ActivityOptions | makeSceneTransitionAnimation(Activity activity, android.util.Pair sharedElements)Create an ActivityOptions to transition between Activities using cross-Activity scene
animations. This method carries the position of multiple shared elements to the started
Activity. The position of the first element in sharedElements
will be used as the epicenter for the exit Transition. The position of the associated
shared element in the launched Activity will be the epicenter of its entering Transition.
This requires {@link android.view.Window#FEATURE_ACTIVITY_TRANSITIONS} to be
enabled on the calling Activity to cause an exit transition. The same must be in
the called Activity to get an entering transition.
ActivityOptions opts = new ActivityOptions();
if (!activity.getWindow().hasFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)) {
opts.mAnimationType = ANIM_DEFAULT;
return opts;
}
opts.mAnimationType = ANIM_SCENE_TRANSITION;
ArrayList<String> names = new ArrayList<String>();
ArrayList<View> views = new ArrayList<View>();
if (sharedElements != null) {
for (int i = 0; i < sharedElements.length; i++) {
Pair<View, String> sharedElement = sharedElements[i];
String sharedElementName = sharedElement.second;
if (sharedElementName == null) {
throw new IllegalArgumentException("Shared element name must not be null");
}
names.add(sharedElementName);
View view = sharedElement.first;
if (view == null) {
throw new IllegalArgumentException("Shared element must not be null");
}
views.add(sharedElement.first);
}
}
ExitTransitionCoordinator exit = new ExitTransitionCoordinator(activity, names, names,
views, false);
opts.mTransitionReceiver = exit;
opts.mSharedElementNames = names;
opts.mIsReturning = false;
opts.mExitCoordinatorIndex =
activity.mActivityTransitionState.addExitTransitionCoordinator(exit);
return opts;
|
public static android.app.ActivityOptions | makeSceneTransitionAnimation(Activity activity, ExitTransitionCoordinator exitCoordinator, java.util.ArrayList sharedElementNames, int resultCode, android.content.Intent resultData)
ActivityOptions opts = new ActivityOptions();
opts.mAnimationType = ANIM_SCENE_TRANSITION;
opts.mSharedElementNames = sharedElementNames;
opts.mTransitionReceiver = exitCoordinator;
opts.mIsReturning = true;
opts.mResultCode = resultCode;
opts.mResultData = resultData;
opts.mExitCoordinatorIndex =
activity.mActivityTransitionState.addExitTransitionCoordinator(exitCoordinator);
return opts;
|
public static android.app.ActivityOptions | makeTaskLaunchBehind()If set along with Intent.FLAG_ACTIVITY_NEW_DOCUMENT then the task being launched will not be
presented to the user but will instead be only available through the recents task list.
In addition, the new task wil be affiliated with the launching activity's task.
Affiliated tasks are grouped together in the recents task list.
This behavior is not supported for activities with {@link
android.R.styleable#AndroidManifestActivity_launchMode launchMode} values of
singleInstance or singleTask .
final ActivityOptions opts = new ActivityOptions();
opts.mAnimationType = ANIM_LAUNCH_TASK_BEHIND;
return opts;
|
private static android.app.ActivityOptions | makeThumbnailAnimation(android.view.View source, android.graphics.Bitmap thumbnail, int startX, int startY, android.app.ActivityOptions$OnAnimationStartedListener listener, boolean scaleUp)
ActivityOptions opts = new ActivityOptions();
opts.mPackageName = source.getContext().getPackageName();
opts.mAnimationType = scaleUp ? ANIM_THUMBNAIL_SCALE_UP : ANIM_THUMBNAIL_SCALE_DOWN;
opts.mThumbnail = thumbnail;
int[] pts = new int[2];
source.getLocationOnScreen(pts);
opts.mStartX = pts[0] + startX;
opts.mStartY = pts[1] + startY;
opts.setOnAnimationStartedListener(source.getHandler(), listener);
return opts;
|
public static android.app.ActivityOptions | makeThumbnailAspectScaleDownAnimation(android.view.View source, android.graphics.Bitmap thumbnail, int startX, int startY, int targetWidth, int targetHeight, android.os.Handler handler, android.app.ActivityOptions$OnAnimationStartedListener listener)Create an ActivityOptions specifying an animation where the new activity
window and a thumbnail is aspect-scaled to a new location.
return makeAspectScaledThumbnailAnimation(source, thumbnail, startX, startY,
targetWidth, targetHeight, handler, listener, false);
|
public static android.app.ActivityOptions | makeThumbnailAspectScaleUpAnimation(android.view.View source, android.graphics.Bitmap thumbnail, int startX, int startY, int targetWidth, int targetHeight, android.os.Handler handler, android.app.ActivityOptions$OnAnimationStartedListener listener)Create an ActivityOptions specifying an animation where the new activity
window and a thumbnail is aspect-scaled to a new location.
return makeAspectScaledThumbnailAnimation(source, thumbnail, startX, startY,
targetWidth, targetHeight, handler, listener, true);
|
public static android.app.ActivityOptions | makeThumbnailScaleDownAnimation(android.view.View source, android.graphics.Bitmap thumbnail, int startX, int startY, android.app.ActivityOptions$OnAnimationStartedListener listener)Create an ActivityOptions specifying an animation where an activity window
is scaled from a given position to a thumbnail at a specified location.
return makeThumbnailAnimation(source, thumbnail, startX, startY, listener, false);
|
public static android.app.ActivityOptions | makeThumbnailScaleUpAnimation(android.view.View source, android.graphics.Bitmap thumbnail, int startX, int startY)Create an ActivityOptions specifying an animation where a thumbnail
is scaled from a given position to the new activity window that is
being started.
If the Intent this is being used with has not set its
{@link android.content.Intent#setSourceBounds Intent.setSourceBounds},
those bounds will be filled in for you based on the initial
thumbnail location and size provided here.
return makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY, null);
|
public static android.app.ActivityOptions | makeThumbnailScaleUpAnimation(android.view.View source, android.graphics.Bitmap thumbnail, int startX, int startY, android.app.ActivityOptions$OnAnimationStartedListener listener)Create an ActivityOptions specifying an animation where a thumbnail
is scaled from a given position to the new activity window that is
being started.
return makeThumbnailAnimation(source, thumbnail, startX, startY, listener, true);
|
private void | setOnAnimationStartedListener(android.os.Handler handler, android.app.ActivityOptions$OnAnimationStartedListener listener)
if (listener != null) {
final Handler h = handler;
final OnAnimationStartedListener finalListener = listener;
mAnimationStartedListener = new IRemoteCallback.Stub() {
@Override public void sendResult(Bundle data) throws RemoteException {
h.post(new Runnable() {
@Override public void run() {
finalListener.onAnimationStarted();
}
});
}
};
}
|
public android.os.Bundle | toBundle()Returns the created options as a Bundle, which can be passed to
{@link android.content.Context#startActivity(android.content.Intent, android.os.Bundle)
Context.startActivity(Intent, Bundle)} and related methods.
Note that the returned Bundle is still owned by the ActivityOptions
object; you must not modify it, but can supply it to the startActivity
methods that take an options Bundle.
if (mAnimationType == ANIM_DEFAULT) {
return null;
}
Bundle b = new Bundle();
if (mPackageName != null) {
b.putString(KEY_PACKAGE_NAME, mPackageName);
}
b.putInt(KEY_ANIM_TYPE, mAnimationType);
switch (mAnimationType) {
case ANIM_CUSTOM:
b.putInt(KEY_ANIM_ENTER_RES_ID, mCustomEnterResId);
b.putInt(KEY_ANIM_EXIT_RES_ID, mCustomExitResId);
b.putBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener
!= null ? mAnimationStartedListener.asBinder() : null);
break;
case ANIM_CUSTOM_IN_PLACE:
b.putInt(KEY_ANIM_IN_PLACE_RES_ID, mCustomInPlaceResId);
break;
case ANIM_SCALE_UP:
b.putInt(KEY_ANIM_START_X, mStartX);
b.putInt(KEY_ANIM_START_Y, mStartY);
b.putInt(KEY_ANIM_WIDTH, mWidth);
b.putInt(KEY_ANIM_HEIGHT, mHeight);
break;
case ANIM_THUMBNAIL_SCALE_UP:
case ANIM_THUMBNAIL_SCALE_DOWN:
case ANIM_THUMBNAIL_ASPECT_SCALE_UP:
case ANIM_THUMBNAIL_ASPECT_SCALE_DOWN:
b.putParcelable(KEY_ANIM_THUMBNAIL, mThumbnail);
b.putInt(KEY_ANIM_START_X, mStartX);
b.putInt(KEY_ANIM_START_Y, mStartY);
b.putInt(KEY_ANIM_WIDTH, mWidth);
b.putInt(KEY_ANIM_HEIGHT, mHeight);
b.putBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener
!= null ? mAnimationStartedListener.asBinder() : null);
break;
case ANIM_SCENE_TRANSITION:
if (mTransitionReceiver != null) {
b.putParcelable(KEY_TRANSITION_COMPLETE_LISTENER, mTransitionReceiver);
}
b.putBoolean(KEY_TRANSITION_IS_RETURNING, mIsReturning);
b.putStringArrayList(KEY_TRANSITION_SHARED_ELEMENTS, mSharedElementNames);
b.putParcelable(KEY_RESULT_DATA, mResultData);
b.putInt(KEY_RESULT_CODE, mResultCode);
b.putInt(KEY_EXIT_COORDINATOR_INDEX, mExitCoordinatorIndex);
break;
}
return b;
|
public void | update(android.app.ActivityOptions otherOptions)Update the current values in this ActivityOptions from those supplied
in otherOptions. Any values
defined in otherOptions replace those in the base options.
if (otherOptions.mPackageName != null) {
mPackageName = otherOptions.mPackageName;
}
mTransitionReceiver = null;
mSharedElementNames = null;
mIsReturning = false;
mResultData = null;
mResultCode = 0;
mExitCoordinatorIndex = 0;
mAnimationType = otherOptions.mAnimationType;
switch (otherOptions.mAnimationType) {
case ANIM_CUSTOM:
mCustomEnterResId = otherOptions.mCustomEnterResId;
mCustomExitResId = otherOptions.mCustomExitResId;
mThumbnail = null;
if (mAnimationStartedListener != null) {
try {
mAnimationStartedListener.sendResult(null);
} catch (RemoteException e) {
}
}
mAnimationStartedListener = otherOptions.mAnimationStartedListener;
break;
case ANIM_CUSTOM_IN_PLACE:
mCustomInPlaceResId = otherOptions.mCustomInPlaceResId;
break;
case ANIM_SCALE_UP:
mStartX = otherOptions.mStartX;
mStartY = otherOptions.mStartY;
mWidth = otherOptions.mWidth;
mHeight = otherOptions.mHeight;
if (mAnimationStartedListener != null) {
try {
mAnimationStartedListener.sendResult(null);
} catch (RemoteException e) {
}
}
mAnimationStartedListener = null;
break;
case ANIM_THUMBNAIL_SCALE_UP:
case ANIM_THUMBNAIL_SCALE_DOWN:
case ANIM_THUMBNAIL_ASPECT_SCALE_UP:
case ANIM_THUMBNAIL_ASPECT_SCALE_DOWN:
mThumbnail = otherOptions.mThumbnail;
mStartX = otherOptions.mStartX;
mStartY = otherOptions.mStartY;
mWidth = otherOptions.mWidth;
mHeight = otherOptions.mHeight;
if (mAnimationStartedListener != null) {
try {
mAnimationStartedListener.sendResult(null);
} catch (RemoteException e) {
}
}
mAnimationStartedListener = otherOptions.mAnimationStartedListener;
break;
case ANIM_SCENE_TRANSITION:
mTransitionReceiver = otherOptions.mTransitionReceiver;
mSharedElementNames = otherOptions.mSharedElementNames;
mIsReturning = otherOptions.mIsReturning;
mThumbnail = null;
mAnimationStartedListener = null;
mResultData = otherOptions.mResultData;
mResultCode = otherOptions.mResultCode;
mExitCoordinatorIndex = otherOptions.mExitCoordinatorIndex;
break;
}
|