Scenepublic final class Scene extends Object A scene represents the collection of values that various properties in the
View hierarchy will have when the scene is applied. A Scene can be
configured to automatically run a Transition when it is applied, which will
animate the various property changes that take place during the
scene change. |
Fields Summary |
---|
private android.content.Context | mContext | private int | mLayoutId | private android.view.ViewGroup | mSceneRoot | private android.view.View | mLayout | Runnable | mEnterAction | Runnable | mExitAction |
Constructors Summary |
---|
public Scene(android.view.ViewGroup sceneRoot)Constructs a Scene with no information about how values will change
when this scene is applied. This constructor might be used when
a Scene is created with the intention of being dynamically configured,
through setting {@link #setEnterAction(Runnable)} and possibly
{@link #setExitAction(Runnable)}.
mSceneRoot = sceneRoot;
| private Scene(android.view.ViewGroup sceneRoot, int layoutId, android.content.Context context)Constructs a Scene which, when entered, will remove any
children from the sceneRoot container and will inflate and add
the hierarchy specified by the layoutId resource file.
This method is hidden because layoutId-based scenes should be
created by the caching factory method {@link Scene#getCurrentScene(View)}.
mContext = context;
mSceneRoot = sceneRoot;
mLayoutId = layoutId;
| public Scene(android.view.ViewGroup sceneRoot, android.view.View layout)Constructs a Scene which, when entered, will remove any
children from the sceneRoot container and add the layout
object as a new child of that container.
mSceneRoot = sceneRoot;
mLayout = layout;
| public Scene(android.view.ViewGroup sceneRoot, android.view.ViewGroup layout)
mSceneRoot = sceneRoot;
mLayout = layout;
|
Methods Summary |
---|
public void | enter()Enters this scene, which entails changing all values that
are specified by this scene. These may be values associated
with a layout view group or layout resource file which will
now be added to the scene root, or it may be values changed by
an {@link #setEnterAction(Runnable)} enter action}, or a
combination of the these. No transition will be run when the
scene is entered. To get transition behavior in scene changes,
use one of the methods in {@link TransitionManager} instead.
// Apply layout change, if any
if (mLayoutId > 0 || mLayout != null) {
// empty out parent container before adding to it
getSceneRoot().removeAllViews();
if (mLayoutId > 0) {
LayoutInflater.from(mContext).inflate(mLayoutId, mSceneRoot);
} else {
mSceneRoot.addView(mLayout);
}
}
// Notify next scene that it is entering. Subclasses may override to configure scene.
if (mEnterAction != null) {
mEnterAction.run();
}
setCurrentScene(mSceneRoot, this);
| public void | exit()Exits this scene, if it is the current scene
on the scene's {@link #getSceneRoot() scene root}. The current scene is
set when {@link #enter() entering} a scene.
Exiting a scene runs the {@link #setExitAction(Runnable) exit action}
if there is one.
if (getCurrentScene(mSceneRoot) == this) {
if (mExitAction != null) {
mExitAction.run();
}
}
| static android.transition.Scene | getCurrentScene(android.view.View view)Gets the current {@link Scene} set on the given view. A scene is set on a view
only if that view is the scene root.
return (Scene) view.getTag(com.android.internal.R.id.current_scene);
| public static android.transition.Scene | getSceneForLayout(android.view.ViewGroup sceneRoot, int layoutId, android.content.Context context)Returns a Scene described by the resource file associated with the given
layoutId parameter. If such a Scene has already been created for
the given sceneRoot , that same Scene will be returned.
This caching of layoutId-based scenes enables sharing of common scenes
between those created in code and those referenced by {@link TransitionManager}
XML resource files.
SparseArray<Scene> scenes = (SparseArray<Scene>) sceneRoot.getTag(
com.android.internal.R.id.scene_layoutid_cache);
if (scenes == null) {
scenes = new SparseArray<Scene>();
sceneRoot.setTagInternal(com.android.internal.R.id.scene_layoutid_cache, scenes);
}
Scene scene = scenes.get(layoutId);
if (scene != null) {
return scene;
} else {
scene = new Scene(sceneRoot, layoutId, context);
scenes.put(layoutId, scene);
return scene;
}
| public android.view.ViewGroup | getSceneRoot()Gets the root of the scene, which is the root of the view hierarchy
affected by changes due to this scene, and which will be animated
when this scene is entered.
return mSceneRoot;
| boolean | isCreatedFromLayoutResource()Returns whether this Scene was created by a layout resource file, determined
by the layoutId passed into
{@link #getSceneForLayout(android.view.ViewGroup, int, android.content.Context)}.
This is called by TransitionManager to determine whether it is safe for views from
this scene to be removed from their parents when the scene is exited, which is
used by {@link Fade} to fade these views out (the views must be removed from
their parent in order to add them to the overlay for fading purposes). If a
Scene is not based on a resource file, then the impact of removing views
arbitrarily is unknown and should be avoided.
return (mLayoutId > 0);
| static void | setCurrentScene(android.view.View view, android.transition.Scene scene)Set the scene that the given view is in. The current scene is set only
on the root view of a scene, not for every view in that hierarchy. This
information is used by Scene to determine whether there is a previous
scene which should be exited before the new scene is entered.
view.setTagInternal(com.android.internal.R.id.current_scene, scene);
| public void | setEnterAction(java.lang.Runnable action)Scenes that are not defined with layout resources or
hierarchies, or which need to perform additional steps
after those hierarchies are changed to, should set an enter
action, and possibly an exit action as well. An enter action
will cause Scene to call back into application code to do
anything else the application needs after transitions have
captured pre-change values and after any other scene changes
have been applied, such as the layout (if any) being added to
the view hierarchy. After this method is called, Transitions will
be played.
mEnterAction = action;
| public void | setExitAction(java.lang.Runnable action)Scenes that are not defined with layout resources or
hierarchies, or which need to perform additional steps
after those hierarchies are changed to, should set an enter
action, and possibly an exit action as well. An exit action
will cause Scene to call back into application code to do
anything the application needs to do after applicable transitions have
captured pre-change values, but before any other scene changes
have been applied, such as the new layout (if any) being added to
the view hierarchy. After this method is called, the next scene
will be entered, including a call to {@link #setEnterAction(Runnable)}
if an enter action is set.
mExitAction = action;
|
|