Преглед изворни кода

Show and hide title with animation on collapse

Guy Carmeli пре 8 година
родитељ
комит
f8fb437441

+ 1
- 0
android/app/src/main/java/com/reactnativenavigation/params/CollapsingTopBarParams.java Прегледај датотеку

@@ -11,6 +11,7 @@ public class CollapsingTopBarParams {
11 11
     public StyleParams.Color scrimColor;
12 12
     public CollapseBehaviour collapseBehaviour;
13 13
     public boolean expendOnTopTabChange;
14
+    public boolean showTitleWhenCollapsed;
14 15
 
15 16
     public boolean hasBackgroundImage() {
16 17
         return imageUri != null;

+ 8
- 11
android/app/src/main/java/com/reactnativenavigation/params/parsers/CollapsingTopBarParamsParser.java Прегледај датотеку

@@ -14,11 +14,15 @@ class CollapsingTopBarParamsParser extends Parser {
14 14
     private Bundle params;
15 15
     private boolean titleBarHideOnScroll;
16 16
     private boolean drawBelowTopBar;
17
+    private final boolean hasReactView;
18
+    private final boolean hasBackgroundImage;
17 19
 
18 20
     CollapsingTopBarParamsParser(Bundle params, boolean titleBarHideOnScroll, boolean drawBelowTopBar) {
19 21
         this.params = params;
20 22
         this.titleBarHideOnScroll = titleBarHideOnScroll;
21 23
         this.drawBelowTopBar = drawBelowTopBar;
24
+        hasReactView = params.containsKey("collapsingToolBarComponent");
25
+        hasBackgroundImage = params.containsKey("collapsingToolBarImage");
22 26
     }
23 27
 
24 28
     public CollapsingTopBarParams parse() {
@@ -31,6 +35,7 @@ class CollapsingTopBarParamsParser extends Parser {
31 35
         result.reactViewHeight = params.getInt("collapsingToolBarComponentHeight");
32 36
         result.expendOnTopTabChange = params.getBoolean("expendCollapsingToolBarOnTopTabChange");
33 37
         result.scrimColor = getColor(params, "collapsingToolBarCollapsedColor", new StyleParams.Color(Color.WHITE));
38
+        result.showTitleWhenCollapsed = hasReactView;
34 39
         result.collapseBehaviour = getCollapseBehaviour();
35 40
         return result;
36 41
     }
@@ -39,12 +44,8 @@ class CollapsingTopBarParamsParser extends Parser {
39 44
         return titleBarHideOnScroll || hasImageOrReactView();
40 45
     }
41 46
 
42
-    private boolean hasImageOrReactView() {
43
-        return hasBackgroundImage() || hasReactView();
44
-    }
45
-
46 47
     private CollapseBehaviour getCollapseBehaviour() {
47
-        if (hasBackgroundImage() || hasReactView()) {
48
+        if (hasImageOrReactView()) {
48 49
             return new CollapseTopBarBehaviour();
49 50
         }
50 51
         if (titleBarHideOnScroll && drawBelowTopBar) {
@@ -53,11 +54,7 @@ class CollapsingTopBarParamsParser extends Parser {
53 54
         return new TitleBarHideOnScrollBehaviour();
54 55
     }
55 56
 
56
-    private boolean hasBackgroundImage() {
57
-        return params.containsKey("collapsingToolBarImage");
58
-    }
59
-
60
-    private boolean hasReactView() {
61
-        return params.containsKey("collapsingToolBarComponent");
57
+    private boolean hasImageOrReactView() {
58
+        return hasBackgroundImage || hasReactView;
62 59
     }
63 60
 }

+ 20
- 1
android/app/src/main/java/com/reactnativenavigation/views/TitleBar.java Прегледај датотеку

@@ -11,6 +11,7 @@ import android.view.Menu;
11 11
 import android.view.View;
12 12
 import android.view.animation.AccelerateDecelerateInterpolator;
13 13
 import android.view.animation.AccelerateInterpolator;
14
+import android.widget.TextView;
14 15
 
15 16
 import com.reactnativenavigation.params.BaseTitleBarButtonParams;
16 17
 import com.reactnativenavigation.params.StyleParams;
@@ -21,7 +22,7 @@ import com.reactnativenavigation.utils.ViewUtils;
21 22
 import java.util.List;
22 23
 
23 24
 public class TitleBar extends Toolbar {
24
-
25
+    private static final int TITLE_VISIBILITY_ANIMATION_DURATION = 320;
25 26
     private LeftButton leftButton;
26 27
     private ActionMenuView actionMenuView;
27 28
 
@@ -175,4 +176,22 @@ public class TitleBar extends Toolbar {
175 176
                     }
176 177
                 });
177 178
     }
179
+
180
+    public void showTitle() {
181
+        animateTitle(1);
182
+    }
183
+
184
+    public void hideTitle() {
185
+        animateTitle(0);
186
+    }
187
+
188
+    private void animateTitle(int alpha) {
189
+        getTitleView().animate()
190
+                .alpha(alpha)
191
+                .setDuration(TITLE_VISIBILITY_ANIMATION_DURATION);
192
+    }
193
+
194
+    private View getTitleView() {
195
+        return getChildAt(0) instanceof TextView ? getChildAt(0) : getChildAt(1);
196
+    }
178 197
 }

+ 13
- 0
android/app/src/main/java/com/reactnativenavigation/views/collapsingToolbar/CollapsingTitleBar.java Прегледај датотеку

@@ -6,6 +6,7 @@ import android.view.View;
6 6
 
7 7
 import com.reactnativenavigation.params.CollapsingTopBarParams;
8 8
 import com.reactnativenavigation.params.StyleParams;
9
+import com.reactnativenavigation.utils.ViewUtils;
9 10
 import com.reactnativenavigation.views.TitleBar;
10 11
 
11 12
 public class CollapsingTitleBar extends TitleBar implements View.OnTouchListener {
@@ -21,6 +22,18 @@ public class CollapsingTitleBar extends TitleBar implements View.OnTouchListener
21 22
         this.params = params;
22 23
         addCollapsingTitle();
23 24
         setOnTouchListener(this);
25
+        hideTitle(params);
26
+    }
27
+
28
+    private void hideTitle(CollapsingTopBarParams params) {
29
+        if (params.showTitleWhenCollapsed) {
30
+            ViewUtils.runOnPreDraw(this, new Runnable() {
31
+                @Override
32
+                public void run() {
33
+                    hideTitle();
34
+                }
35
+            });
36
+        }
24 37
     }
25 38
 
26 39
     private void addCollapsingTitle() {

+ 2
- 12
android/app/src/main/java/com/reactnativenavigation/views/collapsingToolbar/CollapsingTopBar.java Прегледај датотеку

@@ -26,7 +26,6 @@ public class CollapsingTopBar extends TopBar implements CollapsingView {
26 26
     private final CollapsingTopBarParams params;
27 27
     private final ViewCollapser viewCollapser;
28 28
     private final int topBarHeight;
29
-    private String title;
30 29
 
31 30
     public CollapsingTopBar(Context context, final StyleParams params) {
32 31
         super(context);
@@ -58,15 +57,6 @@ public class CollapsingTopBar extends TopBar implements CollapsingView {
58 57
         this.scrollListener = scrollListener;
59 58
     }
60 59
 
61
-    @Override
62
-    public void setTitle(String title) {
63
-        if (params.hasReactView()) {
64
-            this.title = title;
65
-        } else {
66
-            super.setTitle(title);
67
-        }
68
-    }
69
-
70 60
     private void createBackgroundImage() {
71 61
         if (params.hasBackgroundImage()) {
72 62
             collapsingTopBarBackground = new CollapsingTopBarBackground(getContext(), params);
@@ -86,13 +76,13 @@ public class CollapsingTopBar extends TopBar implements CollapsingView {
86 76
             header.setOnHiddenListener(new CollapsingTopBarReactHeaderAnimator.OnHiddenListener() {
87 77
                 @Override
88 78
                 public void onHidden() {
89
-                    titleBar.setTitle(title);
79
+                    titleBar.showTitle();
90 80
                 }
91 81
             });
92 82
             header.setOnVisibleListener(new CollapsingTopBarReactHeaderAnimator.OnVisibleListener() {
93 83
                 @Override
94 84
                 public void onVisible() {
95
-                    titleBar.setTitle("");
85
+                    titleBar.hideTitle();
96 86
                 }
97 87
             });
98 88
         }