Browse Source

Show modal with animation

Guy Carmeli 8 years ago
parent
commit
26136d3cb6

+ 2
- 2
android/app/src/main/java/com/reactnativenavigation/controllers/Modal.java View File

8
 
8
 
9
 import com.reactnativenavigation.R;
9
 import com.reactnativenavigation.R;
10
 import com.reactnativenavigation.layouts.Layout;
10
 import com.reactnativenavigation.layouts.Layout;
11
+import com.reactnativenavigation.layouts.ModalScreenLayout;
11
 import com.reactnativenavigation.layouts.ScreenStackContainer;
12
 import com.reactnativenavigation.layouts.ScreenStackContainer;
12
-import com.reactnativenavigation.layouts.SingleScreenLayout;
13
 import com.reactnativenavigation.params.ScreenParams;
13
 import com.reactnativenavigation.params.ScreenParams;
14
 import com.reactnativenavigation.params.TitleBarButtonParams;
14
 import com.reactnativenavigation.params.TitleBarButtonParams;
15
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
15
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
70
         setCancelable(true);
70
         setCancelable(true);
71
         setOnDismissListener(this);
71
         setOnDismissListener(this);
72
         requestWindowFeature(Window.FEATURE_NO_TITLE);
72
         requestWindowFeature(Window.FEATURE_NO_TITLE);
73
-        layout = new SingleScreenLayout(getActivity(), screenParams, this);
73
+        layout = new ModalScreenLayout(getActivity(), null, screenParams, this);
74
         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
74
         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
75
         setContentView(layout.asView());
75
         setContentView(layout.asView());
76
     }
76
     }

+ 22
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/ModalScreenLayout.java View File

1
+package com.reactnativenavigation.layouts;
2
+
3
+import android.support.annotation.Nullable;
4
+import android.support.v7.app.AppCompatActivity;
5
+
6
+import com.reactnativenavigation.params.ScreenParams;
7
+import com.reactnativenavigation.params.SideMenuParams;
8
+import com.reactnativenavigation.views.LeftButtonOnClickListener;
9
+
10
+public class ModalScreenLayout extends SingleScreenLayout {
11
+
12
+    public ModalScreenLayout(AppCompatActivity activity, @Nullable SideMenuParams sideMenuParams,
13
+                             ScreenParams screenParams, LeftButtonOnClickListener leftButtonOnClickListener) {
14
+        super(activity, sideMenuParams, screenParams);
15
+        this.leftButtonOnClickListener = leftButtonOnClickListener;
16
+    }
17
+
18
+    @Override
19
+    protected void pushInitialScreen(LayoutParams lp) {
20
+        stack.pushInitialScreenWithAnimation(screenParams, lp);
21
+    }
22
+}

+ 7
- 9
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java View File

20
 public class SingleScreenLayout extends RelativeLayout implements Layout {
20
 public class SingleScreenLayout extends RelativeLayout implements Layout {
21
 
21
 
22
     private final AppCompatActivity activity;
22
     private final AppCompatActivity activity;
23
-    private final ScreenParams screenParams;
23
+    protected final ScreenParams screenParams;
24
     private final SideMenuParams sideMenuParams;
24
     private final SideMenuParams sideMenuParams;
25
-    private ScreenStack stack;
26
-    private LeftButtonOnClickListener leftButtonOnClickListener;
25
+    protected ScreenStack stack;
26
+    protected LeftButtonOnClickListener leftButtonOnClickListener;
27
     private @Nullable SideMenu sideMenu;
27
     private @Nullable SideMenu sideMenu;
28
 
28
 
29
-    public SingleScreenLayout(AppCompatActivity activity, ScreenParams screenParams,
30
-                              LeftButtonOnClickListener leftButtonOnClickListener) {
31
-        this(activity, null, screenParams);
32
-        this.leftButtonOnClickListener = leftButtonOnClickListener;
33
-    }
34
-
35
     public SingleScreenLayout(AppCompatActivity activity, @Nullable SideMenuParams sideMenuParams, ScreenParams screenParams) {
29
     public SingleScreenLayout(AppCompatActivity activity, @Nullable SideMenuParams sideMenuParams, ScreenParams screenParams) {
36
         super(activity);
30
         super(activity);
37
         this.activity = activity;
31
         this.activity = activity;
62
         }
56
         }
63
         stack = new ScreenStack(activity, parent, screenParams.getNavigatorId(), this);
57
         stack = new ScreenStack(activity, parent, screenParams.getNavigatorId(), this);
64
         LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
58
         LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
59
+        pushInitialScreen(lp);
60
+    }
61
+
62
+    protected void pushInitialScreen(LayoutParams lp) {
65
         stack.pushInitialScreen(screenParams, lp);
63
         stack.pushInitialScreen(screenParams, lp);
66
         stack.show();
64
         stack.show();
67
     }
65
     }

+ 11
- 0
android/app/src/main/java/com/reactnativenavigation/screens/ScreenStack.java View File

48
         keyboardVisibilityDetector = new KeyboardVisibilityDetector(parent);
48
         keyboardVisibilityDetector = new KeyboardVisibilityDetector(parent);
49
     }
49
     }
50
 
50
 
51
+    public void pushInitialScreenWithAnimation(final ScreenParams initialScreenParams, RelativeLayout.LayoutParams params) {
52
+        pushInitialScreen(initialScreenParams, params);
53
+        final Screen screen = stack.peek();
54
+        screen.setOnDisplayListener(new Screen.OnDisplayListener() {
55
+            @Override
56
+            public void onDisplay() {
57
+                screen.show(initialScreenParams.animateScreenTransitions);
58
+            }
59
+        });
60
+    }
61
+
51
     public void pushInitialScreen(ScreenParams initialScreenParams, RelativeLayout.LayoutParams params) {
62
     public void pushInitialScreen(ScreenParams initialScreenParams, RelativeLayout.LayoutParams params) {
52
         Screen initialScreen = ScreenFactory.create(activity, initialScreenParams, leftButtonOnClickListener);
63
         Screen initialScreen = ScreenFactory.create(activity, initialScreenParams, leftButtonOnClickListener);
53
         initialScreen.setVisibility(View.INVISIBLE);
64
         initialScreen.setVisibility(View.INVISIBLE);