Skip to content

Commit 901d62c

Browse files
committed
Added appeal and unnappear effect on the second layout
1 parent a74b19e commit 901d62c

File tree

12 files changed

+254
-84
lines changed

12 files changed

+254
-84
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.saulmm.material;
2+
3+
import android.animation.Animator;
4+
5+
public class AnimListener implements Animator.AnimatorListener {
6+
@Override
7+
public void onAnimationStart(Animator animator) {
8+
9+
}
10+
11+
@Override
12+
public void onAnimationEnd(Animator animator) {
13+
14+
}
15+
16+
@Override
17+
public void onAnimationCancel(Animator animator) {
18+
19+
}
20+
21+
@Override
22+
public void onAnimationRepeat(Animator animator) {
23+
24+
}
25+
}

app/src/main/java/com/saulmm/material/MyActivity.java

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,12 @@
33
import android.app.Activity;
44
import android.app.ActivityOptions;
55
import android.content.Intent;
6-
import android.graphics.Outline;
76
import android.os.Bundle;
8-
import android.transition.CircularPropagation;
9-
import android.transition.Explode;
10-
import android.transition.Scene;
11-
import android.transition.Slide;
12-
import android.transition.TransitionManager;
137
import android.util.Pair;
14-
import android.view.Menu;
158
import android.view.View;
16-
import android.widget.FrameLayout;
17-
import android.widget.Toast;
18-
19-
import com.saulmm.material.R;
20-
219

2210
public class MyActivity extends Activity {
2311

24-
private FrameLayout frameContainer;
25-
private View holderView;
2612
private View fabButton;
2713

2814
@Override
@@ -31,22 +17,13 @@ protected void onCreate(Bundle savedInstanceState) {
3117
super.onCreate(savedInstanceState);
3218
setContentView(R.layout.activity_my);
3319

34-
Utils.configureWindowEnterExitTransition(getWindow());;
20+
// Set explode animation when enter and exit the activity
21+
Utils.configureWindowEnterExitTransition(getWindow());
3522

3623
// Fab Button
37-
int fabSize = getResources().getDimensionPixelSize(R.dimen.fab_size);
38-
Outline fabOutLine = new Outline();
39-
fabOutLine.setOval(0, 0, fabSize, fabSize);
40-
41-
// Fragment container
42-
frameContainer = (FrameLayout) findViewById(R.id.container);
43-
44-
holderView = findViewById(R.id.holder_view);
45-
46-
// FabView
4724
fabButton = findViewById(R.id.fab_button);
4825
fabButton.setOnClickListener(fabClickListener);
49-
fabButton.setOutline(fabOutLine);
26+
Utils.configureFab(fabButton);
5027
}
5128

5229

@@ -55,7 +32,11 @@ protected void onCreate(Bundle savedInstanceState) {
5532
public void onClick(View view) {
5633

5734
Intent i = new Intent (MyActivity.this, MyActivity2.class);
58-
startActivity(i);
35+
36+
ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation(MyActivity.this,
37+
Pair.create(fabButton, "fab"));
38+
39+
startActivity(i, transitionActivityOptions.toBundle());
5940
}
6041
};
6142
}
Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.saulmm.material;
22

3+
import android.animation.Animator;
4+
import android.animation.LayoutTransition;
35
import android.app.Activity;
46
import android.app.Fragment;
57
import android.graphics.Outline;
@@ -9,39 +11,86 @@
911
import android.transition.Explode;
1012
import android.transition.Scene;
1113
import android.transition.Slide;
14+
import android.transition.Transition;
1215
import android.transition.TransitionManager;
1316
import android.view.Menu;
1417
import android.view.MenuItem;
18+
import android.view.View;
19+
import android.view.ViewGroup;
20+
import android.view.ViewPropertyAnimator;
1521
import android.widget.FrameLayout;
22+
import android.widget.LinearLayout;
1623

1724
import com.saulmm.material.R;
1825

1926
public class MyActivity2 extends Activity {
2027

21-
private FrameLayout frameContainer;
28+
private static final int NUM_VIEWS = 5;
29+
private static final int SCALE_ITEM_ANIMATION_DELAY = 30;
30+
private LinearLayout rowContainer;
2231

2332
@Override
2433
protected void onCreate(Bundle savedInstanceState) {
2534
super.onCreate(savedInstanceState);
35+
2636
setContentView(R.layout.activity_my2);
2737

28-
// Fab Button
29-
int fabSize = getResources().getDimensionPixelSize(R.dimen.fab_size);
30-
Outline fabOutLine = new Outline();
38+
rowContainer = (LinearLayout) findViewById(R.id.row_container2);
3139

3240
Utils.configureWindowEnterExitTransition(getWindow());
3341

34-
fabOutLine.setOval(0, 0, fabSize, fabSize);
42+
getWindow().getEnterTransition().addListener(new Transition.TransitionListener() {
43+
@Override
44+
public void onTransitionStart(Transition transition) {}
45+
46+
@Override
47+
public void onTransitionCancel(Transition transition) {}
48+
49+
@Override
50+
public void onTransitionPause(Transition transition) {}
51+
52+
@Override
53+
public void onTransitionResume(Transition transition) {}
54+
55+
@Override
56+
public void onTransitionEnd(Transition transition) {
57+
getWindow().getEnterTransition().removeListener(this);
58+
59+
for (int i = 0; i < rowContainer.getChildCount(); i++) {
60+
61+
View rowView = rowContainer.getChildAt(i);
62+
rowView.animate().setStartDelay(i * SCALE_ITEM_ANIMATION_DELAY)
63+
.scaleX(1).scaleY(1);
64+
}
65+
}
66+
});
3567
}
3668

3769
@Override
38-
protected void onResume() {
70+
public void onBackPressed() {
71+
72+
for (int i = 0; i < rowContainer.getChildCount(); i++) {
73+
74+
View rowView = rowContainer.getChildAt(i);
75+
ViewPropertyAnimator propertyAnimator = rowView.animate().setStartDelay(i * SCALE_ITEM_ANIMATION_DELAY)
76+
.scaleX(0).scaleY(0);
77+
78+
propertyAnimator.setListener(new Animator.AnimatorListener() {
79+
@Override
80+
public void onAnimationStart(Animator animator) {}
81+
82+
@Override
83+
public void onAnimationEnd(Animator animator) {
3984

40-
super.onResume();
85+
finishAfterTransition();
86+
}
4187

42-
frameContainer = (FrameLayout) findViewById(R.id.container);
88+
@Override
89+
public void onAnimationCancel(Animator animator) {}
4390

44-
Scene scene1 = Scene.getSceneForLayout(frameContainer, R.layout.activity_my_activity2, this);
45-
TransitionManager.go(scene1, new Explode());
91+
@Override
92+
public void onAnimationRepeat(Animator animator) {}
93+
});
94+
}
4695
}
4796
}
Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
11
package com.saulmm.material;
22

3-
import android.transition.CircularPropagation;
3+
import android.graphics.Outline;
44
import android.transition.Explode;
5+
import android.transition.Slide;
6+
import android.view.View;
57
import android.view.Window;
8+
import android.view.animation.PathInterpolator;
69

7-
/**
8-
* Created by saulmm on 16/10/14.
9-
*/
1010
public class Utils {
1111

1212
public static void configureWindowEnterExitTransition (Window w) {
1313

1414
Explode ex = new Explode();
15+
ex.setInterpolator(new PathInterpolator(0.4f, 0, 1, 1));
16+
w.setExitTransition(ex);
17+
w.setEnterTransition(ex);
18+
}
1519

16-
CircularPropagation c = new CircularPropagation();
17-
c.setPropagationSpeed(2f);
20+
public static void configureFab (View fabButton) {
1821

19-
ex.setPropagation(c);
22+
int fabSize = fabButton.getContext().getResources()
23+
.getDimensionPixelSize(R.dimen.fab_size);
2024

21-
w.setExitTransition(ex);
22-
w.setEnterTransition(ex);
25+
Outline fabOutLine = new Outline();
26+
fabOutLine.setOval(0, 0, fabSize, fabSize);
27+
fabButton.setOutline(fabOutLine);
2328
}
2429
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<LinearLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
6+
android:paddingRight="@dimen/activity_horizontal_margin"
7+
android:paddingTop="@dimen/activity_vertical_margin"
8+
android:paddingBottom="@dimen/activity_vertical_margin"
9+
android:orientation="vertical"
10+
tools:context="emmaguy.l.timing.HierarchicalTimingActivity">
11+
12+
<LinearLayout
13+
android:id="@+id/row_container"
14+
android:layout_width="match_parent"
15+
android:layout_height="wrap_content"
16+
android:gravity="center"
17+
android:orientation="vertical">
18+
19+
<View
20+
android:layout_width="match_parent"
21+
android:layout_marginTop="5dp"
22+
android:layout_height="64dp"
23+
android:id="@+id/view_1"
24+
android:scaleX="0"
25+
android:scaleY="0"
26+
android:background="@color/accent"/>
27+
28+
29+
<View
30+
android:layout_width="match_parent"
31+
android:layout_marginTop="5dp"
32+
android:layout_height="64dp"
33+
android:id="@+id/view_2"
34+
android:scaleX="0"
35+
android:scaleY="0"
36+
android:background="@color/accent"/>
37+
38+
39+
<View
40+
android:layout_width="match_parent"
41+
android:layout_marginTop="5dp"
42+
android:layout_height="64dp"
43+
android:id="@+id/view_3"
44+
android:scaleX="0"
45+
android:scaleY="0"
46+
android:background="@color/accent"/>
47+
48+
49+
<View
50+
android:layout_width="match_parent"
51+
android:layout_marginTop="5dp"
52+
android:layout_height="64dp"
53+
android:id="@+id/view_4"
54+
android:scaleX="0"
55+
android:scaleY="0"
56+
android:background="@color/accent"/>
57+
58+
59+
<View
60+
android:layout_width="match_parent"
61+
android:layout_marginTop="5dp"
62+
android:layout_height="64dp"
63+
android:id="@+id/view_5"
64+
android:scaleX="0"
65+
android:scaleY="0"
66+
android:background="@color/accent"/>
67+
68+
69+
<View
70+
android:layout_width="match_parent"
71+
android:layout_marginTop="5dp"
72+
android:layout_height="64dp"
73+
android:id="@+id/view_6"
74+
android:scaleX="0"
75+
android:scaleY="0"
76+
android:background="@color/accent"/>
77+
78+
<View
79+
android:layout_width="match_parent"
80+
android:layout_marginTop="5dp"
81+
android:layout_height="64dp"
82+
android:id="@+id/view_7"
83+
android:scaleX="0"
84+
android:scaleY="0"
85+
android:background="@color/accent"/>
86+
<View
87+
android:layout_width="match_parent"
88+
android:layout_marginTop="5dp"
89+
android:layout_height="64dp"
90+
android:id="@+id/view_8"
91+
android:scaleX="0"
92+
android:scaleY="0"
93+
android:background="@color/accent"/>
94+
95+
</LinearLayout>
96+
97+
</LinearLayout>

0 commit comments

Comments
 (0)