Sfoglia il codice sorgente

Show modal with animation

Guy Carmeli 8 anni fa
parent
commit
26136d3cb6

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

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

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

@@ -0,0 +1,22 @@
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 Vedi File

@@ -20,18 +20,12 @@ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
20 20
 public class SingleScreenLayout extends RelativeLayout implements Layout {
21 21
 
22 22
     private final AppCompatActivity activity;
23
-    private final ScreenParams screenParams;
23
+    protected final ScreenParams screenParams;
24 24
     private final SideMenuParams sideMenuParams;
25
-    private ScreenStack stack;
26
-    private LeftButtonOnClickListener leftButtonOnClickListener;
25
+    protected ScreenStack stack;
26
+    protected LeftButtonOnClickListener leftButtonOnClickListener;
27 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 29
     public SingleScreenLayout(AppCompatActivity activity, @Nullable SideMenuParams sideMenuParams, ScreenParams screenParams) {
36 30
         super(activity);
37 31
         this.activity = activity;
@@ -62,6 +56,10 @@ public class SingleScreenLayout extends RelativeLayout implements Layout {
62 56
         }
63 57
         stack = new ScreenStack(activity, parent, screenParams.getNavigatorId(), this);
64 58
         LayoutParams lp = new LayoutParams(MATCH_PARENT, MATCH_PARENT);
59
+        pushInitialScreen(lp);
60
+    }
61
+
62
+    protected void pushInitialScreen(LayoutParams lp) {
65 63
         stack.pushInitialScreen(screenParams, lp);
66 64
         stack.show();
67 65
     }

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

@@ -48,6 +48,17 @@ public class ScreenStack {
48 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 62
     public void pushInitialScreen(ScreenParams initialScreenParams, RelativeLayout.LayoutParams params) {
52 63
         Screen initialScreen = ScreenFactory.create(activity, initialScreenParams, leftButtonOnClickListener);
53 64
         initialScreen.setVisibility(View.INVISIBLE);