Use new Quantum Paper Activity Transitions API.

Change-Id: Ia487e02e8cb7a90bd14b0e09392eddac5c1a06ec
This commit is contained in:
George Mount
2014-02-26 13:05:43 -08:00
parent f46308ba8c
commit f93d490356
6 changed files with 28 additions and 75 deletions

View File

@@ -1295,7 +1295,7 @@
<activity android:name=".animation.ActivityTransition" <activity android:name=".animation.ActivityTransition"
android:label="Animation/Activity Transition" android:label="Animation/Activity Transition"
android:enabled="@bool/atLeastHoneycomb" android:enabled="@bool/atLeastLRelease"
android:theme="@style/ActivityTransitionTheme"> android:theme="@style/ActivityTransitionTheme">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@@ -1305,7 +1305,7 @@
<activity android:name=".animation.ActivityTransitionDetails" <activity android:name=".animation.ActivityTransitionDetails"
android:label="Animation/Details of a specific thingy" android:label="Animation/Details of a specific thingy"
android:enabled="@bool/atLeastHoneycomb" android:enabled="@bool/atLeastLRelease"
android:theme="@style/ActivityTransitionTheme"> android:theme="@style/ActivityTransitionTheme">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

View File

@@ -26,10 +26,4 @@
<!-- For API level XX or later, we can use the magical DialogWhenLarge theme. --> <!-- For API level XX or later, we can use the magical DialogWhenLarge theme. -->
<style name="ThemeCurrentDialogWhenLarge" parent="android:style/Theme.Quantum.DialogWhenLarge"> <style name="ThemeCurrentDialogWhenLarge" parent="android:style/Theme.Quantum.DialogWhenLarge">
</style> </style>
<style name="ActivityTransitionTheme" parent="android:style/Theme.Quantum">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentTransitionManager">@transition/activity_transition_mgr</item>
</style>
</resources> </resources>

View File

@@ -26,10 +26,4 @@
<!-- For API level XX or later, we can use the magical DialogWhenLarge theme. --> <!-- For API level XX or later, we can use the magical DialogWhenLarge theme. -->
<style name="ThemeCurrentDialogWhenLarge" parent="android:style/Theme.Quantum.Light.DialogWhenLarge"> <style name="ThemeCurrentDialogWhenLarge" parent="android:style/Theme.Quantum.Light.DialogWhenLarge">
</style> </style>
<style name="ActivityTransitionTheme" parent="android:style/Theme.Quantum.Light">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentTransitionManager">@transition/activity_transition_mgr</item>
</style>
</resources> </resources>

View File

@@ -120,10 +120,14 @@
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
</style> </style>
<style name="ActivityTransitionTheme" parent="android:style/Theme.Holo"> <style name="ActivityTransitionTheme" parent="android:Theme.Quantum">
<item name="android:windowIsTranslucent">true</item> <item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowExitTransition">@transition/explode</item>
<item name="android:windowContentTransitionManager">@transition/activity_transition_mgr</item> <item name="android:windowSharedElementEnterTransition">@transition/move_image</item>
<item name="android:windowSharedElementExitTransition">@transition/move_image</item>
<item name="android:windowAllowExitTransitionOverlap">true</item>
<item name="android:windowAllowEnterTransitionOverlap">false</item>
<item name="android:windowContentTransitions">true</item>
</style> </style>
</resources> </resources>

View File

@@ -22,17 +22,10 @@ import android.app.ActivityOptions;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.os.Bundle; import android.os.Bundle;
import android.transition.MoveImage; import android.util.Pair;
import android.transition.Slide;
import android.transition.TransitionManager;
import android.transition.TransitionSet;
import android.util.ArrayMap;
import android.view.View; import android.view.View;
import android.view.Window;
import android.widget.ImageView; import android.widget.ImageView;
import java.util.Random;
/** /**
* *
*/ */
@@ -42,8 +35,6 @@ public class ActivityTransition extends Activity {
private static final String KEY_ID = "ViewTransitionValues:id"; private static final String KEY_ID = "ViewTransitionValues:id";
private Random mRandom = new Random();
private ImageView mHero; private ImageView mHero;
public static final int[] DRAWABLES = { public static final int[] DRAWABLES = {
@@ -100,20 +91,9 @@ public class ActivityTransition extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setAllowOverlappingEnterTransition(true);
getWindow().setAllowOverlappingExitTransition(true);
getWindow().setBackgroundDrawable(new ColorDrawable(randomColor())); getWindow().setBackgroundDrawable(new ColorDrawable(randomColor()));
setContentView(R.layout.image_block); setContentView(R.layout.image_block);
setupHero(); setupHero();
TransitionManager transitionManager = getContentTransitionManager();
TransitionSet transitions = new TransitionSet();
Slide slide = new Slide();
slide.setDuration(600);
transitions.addTransition(slide);
transitions.addTransition(new MoveImage());
transitionManager.setTransition(getContentScene(), transitions);
transitionManager.setExitTransition(getContentScene(), transitions);
} }
private void setupHero() { private void setupHero() {
@@ -121,9 +101,12 @@ public class ActivityTransition extends Activity {
mHero = null; mHero = null;
if (name != null) { if (name != null) {
mHero = (ImageView) findViewById(getIdForKey(name)); mHero = (ImageView) findViewById(getIdForKey(name));
ArrayMap<String, String> sharedElementsMap = new ArrayMap<String, String>(); setActivityTransitionListener(new ActivityOptions.ActivityTransitionListener() {
sharedElementsMap.put("hero", mHero.getSharedElementName()); @Override
getWindow().mapTransitionTargets(sharedElementsMap); public Pair<View, String>[] getSharedElementsMapping() {
return new Pair[] { Pair.create((View)mHero, "hero") };
}
});
} }
} }
@@ -132,14 +115,14 @@ public class ActivityTransition extends Activity {
Intent intent = new Intent(this, ActivityTransitionDetails.class); Intent intent = new Intent(this, ActivityTransitionDetails.class);
intent.putExtra(KEY_ID, v.getSharedElementName()); intent.putExtra(KEY_ID, v.getSharedElementName());
ActivityOptions activityOptions ActivityOptions activityOptions
= ActivityOptions.makeSceneTransitionAnimation(mHero, "hero"); = ActivityOptions.makeSceneTransitionAnimation(getWindow(), mHero, "hero");
startActivity(intent, activityOptions.toBundle()); startActivity(intent, activityOptions.toBundle());
} }
private int randomColor() { private static int randomColor() {
int red = mRandom.nextInt(128); int red = (int)(Math.random() * 128);
int green = mRandom.nextInt(128); int green = (int)(Math.random() * 128);
int blue = mRandom.nextInt(128); int blue = (int)(Math.random() * 128);
return 0xFF000000 | (red << 16) | (green << 8) | blue; return 0xFF000000 | (red << 16) | (green << 8) | blue;
} }
} }

View File

@@ -23,16 +23,9 @@ import android.content.Intent;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.transition.MoveImage;
import android.transition.Slide;
import android.transition.TransitionManager;
import android.transition.TransitionSet;
import android.view.View; import android.view.View;
import android.view.Window;
import android.widget.ImageView; import android.widget.ImageView;
import java.util.Random;
/** /**
* *
*/ */
@@ -42,8 +35,6 @@ public class ActivityTransitionDetails extends Activity {
private static final String KEY_ID = "ViewTransitionValues:id"; private static final String KEY_ID = "ViewTransitionValues:id";
private Random mRandom = new Random();
private int mImageResourceId = R.drawable.ducky; private int mImageResourceId = R.drawable.ducky;
private String mName = "ducky"; private String mName = "ducky";
@@ -51,23 +42,10 @@ public class ActivityTransitionDetails extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setAllowOverlappingEnterTransition(false);
getWindow().setAllowOverlappingExitTransition(true);
getWindow().setBackgroundDrawable(new ColorDrawable(randomColor())); getWindow().setBackgroundDrawable(new ColorDrawable(randomColor()));
setContentView(R.layout.image_details); setContentView(R.layout.image_details);
ImageView titleImage = (ImageView) findViewById(R.id.titleImage); ImageView titleImage = (ImageView) findViewById(R.id.titleImage);
titleImage.setImageDrawable(getHeroDrawable()); titleImage.setImageDrawable(getHeroDrawable());
TransitionManager transitionManager = getContentTransitionManager();
TransitionSet transitions = new TransitionSet();
Slide slide = new Slide();
slide.setDuration(600);
transitions.addTransition(slide);
transitions.addTransition(new MoveImage());
transitionManager.setTransition(getContentScene(), transitions);
transitionManager.setExitTransition(getContentScene(), transitions);
} }
private Drawable getHeroDrawable() { private Drawable getHeroDrawable() {
@@ -83,15 +61,15 @@ public class ActivityTransitionDetails extends Activity {
public void clicked(View v) { public void clicked(View v) {
Intent intent = new Intent(this, ActivityTransition.class); Intent intent = new Intent(this, ActivityTransition.class);
intent.putExtra(KEY_ID, mName); intent.putExtra(KEY_ID, mName);
ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(v, "hero"); ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(getWindow(),
v, "hero");
startActivity(intent, activityOptions.toBundle()); startActivity(intent, activityOptions.toBundle());
} }
private int randomColor() { private static int randomColor() {
int red = mRandom.nextInt(128); int red = (int)(Math.random() * 128);
int green = mRandom.nextInt(128); int green = (int)(Math.random() * 128);
int blue = mRandom.nextInt(128); int blue = (int)(Math.random() * 128);
return 0xFF000000 | (red << 16) | (green << 8) | blue; return 0xFF000000 | (red << 16) | (green << 8) | blue;
} }
} }