Skip to content

Commit 5523fcb

Browse files
committed
Added a transition between activities with shared elements
1 parent 8872619 commit 5523fcb

File tree

15 files changed

+197
-50
lines changed

15 files changed

+197
-50
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010
<activity
1111
android:name=".MyActivity"
1212
android:label="" >
13-
1413
<intent-filter>
1514
<action android:name="android.intent.action.MAIN" />
15+
1616
<category android:name="android.intent.category.LAUNCHER" />
1717
</intent-filter>
18-
18+
</activity>
19+
<activity
20+
android:name=".MyActivity2"
21+
android:label="@string/title_activity_my_activity2" >
1922
</activity>
2023
</application>
2124

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
11
package com.saulmm.material;
22

33
import android.app.Activity;
4+
import android.app.ActivityOptions;
5+
import android.content.Intent;
46
import android.graphics.Outline;
57
import android.os.Bundle;
8+
import android.transition.Explode;
9+
import android.transition.Scene;
10+
import android.transition.Slide;
11+
import android.transition.TransitionManager;
12+
import android.util.Pair;
613
import android.view.Menu;
714
import android.view.View;
15+
import android.widget.FrameLayout;
816
import android.widget.Toast;
917

1018
import com.saulmm.material.R;
1119

1220

1321
public class MyActivity extends Activity {
1422

23+
private FrameLayout frameContainer;
24+
private View holderView;
25+
private View fabButton;
26+
1527
@Override
1628
protected void onCreate(Bundle savedInstanceState) {
1729

@@ -23,19 +35,27 @@ protected void onCreate(Bundle savedInstanceState) {
2335
Outline fabOutLine = new Outline();
2436
fabOutLine.setOval(0, 0, fabSize, fabSize);
2537

38+
// Fragment container
39+
frameContainer = (FrameLayout) findViewById(R.id.container);
40+
41+
holderView = findViewById(R.id.holder_view);
42+
2643
// FabView
27-
View fabView = findViewById(R.id.fab_button);
28-
fabView.setOnClickListener(fabClickListener);
29-
fabView.setOutline(fabOutLine);
44+
fabButton = findViewById(R.id.fab_button);
45+
fabButton.setOnClickListener(fabClickListener);
46+
fabButton.setOutline(fabOutLine);
3047
}
3148

3249

3350
View.OnClickListener fabClickListener = new View.OnClickListener() {
3451
@Override
3552
public void onClick(View view) {
53+
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MyActivity.this,
54+
Pair.create(holderView, "holder2"),
55+
Pair.create(fabButton, "fab"));
3656

37-
Toast.makeText(MyActivity.this, "Hi",
38-
Toast.LENGTH_SHORT).show();
57+
Intent i = new Intent (MyActivity.this, MyActivity2.class);
58+
startActivity(i, options.toBundle());
3959
}
4060
};
4161
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.saulmm.material;
2+
3+
import android.app.Activity;
4+
import android.app.Fragment;
5+
import android.graphics.Outline;
6+
import android.os.Bundle;
7+
import android.transition.ChangeBounds;
8+
import android.transition.Explode;
9+
import android.transition.Scene;
10+
import android.transition.Slide;
11+
import android.transition.TransitionManager;
12+
import android.view.Menu;
13+
import android.view.MenuItem;
14+
import android.widget.FrameLayout;
15+
16+
import com.saulmm.material.R;
17+
18+
public class MyActivity2 extends Activity {
19+
20+
private FrameLayout frameContainer;
21+
22+
@Override
23+
protected void onCreate(Bundle savedInstanceState) {
24+
super.onCreate(savedInstanceState);
25+
setContentView(R.layout.activity_my2);
26+
27+
// Fab Button
28+
int fabSize = getResources().getDimensionPixelSize(R.dimen.fab_size);
29+
Outline fabOutLine = new Outline();
30+
fabOutLine.setOval(0, 0, fabSize, fabSize);
31+
}
32+
33+
@Override
34+
protected void onResume() {
35+
36+
super.onResume();
37+
38+
frameContainer = (FrameLayout) findViewById(R.id.container);
39+
40+
Scene scene1 = Scene.getSceneForLayout(frameContainer, R.layout.activity_my_activity2, this);
41+
TransitionManager.go(scene1, new Explode());
42+
}
43+
}

app/src/main/res/anim/fab_anim.xml

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
<?xml version="1.0" encoding="utf-8"?>
22

3+
<!-- animate the translationZ property of a view when pressed -->
34
<selector xmlns:android="http://schemas.android.com/apk/res/android">
4-
5-
<item
6-
android:state_enabled="true"
7-
android:state_pressed="true"
8-
>
9-
10-
<objectAnimator
11-
android:duration="@android:integer/config_shortAnimTime"
12-
android:propertyName="translationZ"
13-
android:valueFrom="@dimen/button_elevation"
14-
android:valueTo="@dimen/button_press_elevation"
15-
android:valueType="floatType"
16-
/>
5+
<item android:state_pressed="true">
6+
<set>
7+
<objectAnimator android:propertyName="translationZ"
8+
android:duration="100"
9+
android:valueTo="2"
10+
android:valueType="floatType"/>
11+
<!-- you could have other objectAnimator elements
12+
here for "x" and "y", or other properties -->
13+
</set>
1714
</item>
18-
<item>
19-
20-
<objectAnimator
21-
android:duration="@android:integer/config_shortAnimTime"
22-
android:propertyName="translationZ"
23-
android:valueFrom="@dimen/button_press_elevation"
24-
android:valueTo="@dimen/button_elevation"
25-
android:valueType="floatType"
26-
/>
15+
<item android:state_enabled="true"
16+
android:state_pressed="false"
17+
android:state_focused="true">
18+
<set>
19+
<objectAnimator android:propertyName="translationZ"
20+
android:duration="100"
21+
android:valueTo="10"
22+
android:valueType="floatType"/>
23+
</set>
2724
</item>
2825
</selector>
-330 Bytes
Binary file not shown.
-192 Bytes
Binary file not shown.
-339 Bytes
Binary file not shown.
-651 Bytes
Binary file not shown.

app/src/main/res/layout/activity_my.xml

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,27 @@
77
tools:context=".MyActivity"
88
>
99

10-
<FrameLayout
10+
<View
1111
android:id="@+id/holder_view"
1212
android:layout_width="match_parent"
13-
android:layout_height="72dp"
14-
android:background="?android:colorPrimary">
15-
16-
<TextView
17-
android:id="@+id/holder_text"
18-
android:layout_width="wrap_content"
19-
android:layout_height="wrap_content"
20-
android:text="First activity"
21-
android:textSize="30sp"
22-
android:textColor="?android:colorForeground"
23-
android:layout_marginLeft="72dp"
24-
android:layout_marginBottom="@dimen/activity_vertical_margin"
25-
android:layout_gravity="bottom"
26-
android:fontFamily="sans-serif-light"
13+
android:layout_height="144dp"
14+
android:viewName="holder1"
15+
android:background="?android:colorPrimary"
2716
/>
2817

29-
</FrameLayout>
30-
31-
<ImageButton
18+
<Button
3219
xmlns:android="http://schemas.android.com/apk/res/android"
3320
android:id="@+id/fab_button"
21+
android:viewName="fab"
3422
android:layout_width="@dimen/fab_size"
3523
android:layout_height="@dimen/fab_size"
3624
android:layout_marginRight="@dimen/activity_horizontal_margin"
3725
android:background="@drawable/ripple_round"
3826
android:stateListAnimator="@anim/fab_anim"
39-
android:src="@drawable/ic_action_add"
4027
android:elevation="5dp"
4128
android:layout_below="@+id/holder_view"
4229
android:layout_marginTop="-26dp"
43-
android:layout_alignParentEnd="true" />
30+
android:layout_alignParentEnd="true"
31+
/>
4432

4533
</RelativeLayout>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2+
xmlns:tools="http://schemas.android.com/tools"
3+
android:layout_width="match_parent"
4+
android:layout_height="match_parent"
5+
android:paddingBottom="@dimen/activity_vertical_margin"
6+
7+
tools:context=".MyActivity"
8+
>
9+
10+
<View
11+
android:id="@+id/holder_view"
12+
android:layout_width="match_parent"
13+
android:layout_height="250dp"
14+
android:viewName="holder2"
15+
android:background="?android:colorPrimary"/>
16+
17+
<Button
18+
xmlns:android="http://schemas.android.com/apk/res/android"
19+
android:id="@+id/fab_button"
20+
android:layout_width="@dimen/fab_size"
21+
android:viewName="fab"
22+
android:layout_height="@dimen/fab_size"
23+
android:layout_marginRight="@dimen/activity_horizontal_margin"
24+
android:background="@drawable/ripple_round"
25+
android:stateListAnimator="@anim/fab_anim"
26+
android:src="@drawable/ic_action_add"
27+
android:elevation="5dp"
28+
android:layout_alignParentBottom="true"
29+
android:layout_alignParentEnd="true" />
30+
31+
<FrameLayout
32+
android:id="@+id/container"
33+
android:layout_below="@id/holder_view"
34+
android:layout_width="match_parent"
35+
android:layout_height="match_parent">
36+
37+
38+
</FrameLayout>
39+
40+
</RelativeLayout>

0 commit comments

Comments
 (0)