ソースを参照

Add fabs to FloatingActionButtonCoordinator

Guy Carmeli 8 年 前
コミット
cf34e02c2d

+ 115
- 0
android/app/src/main/java/com/reactnativenavigation/views/FloatingActionButtonCoordinator.java ファイルの表示

@@ -0,0 +1,115 @@
1
+package com.reactnativenavigation.views;
2
+
3
+import android.animation.Animator;
4
+import android.animation.AnimatorListenerAdapter;
5
+import android.graphics.drawable.Drawable;
6
+import android.support.design.widget.CoordinatorLayout;
7
+import android.support.design.widget.FloatingActionButton;
8
+import android.view.Gravity;
9
+import android.view.View;
10
+import android.view.ViewGroup;
11
+
12
+import com.reactnativenavigation.params.FabParams;
13
+import com.reactnativenavigation.utils.ViewUtils;
14
+
15
+public class FloatingActionButtonCoordinator {
16
+
17
+    private CoordinatorLayout parent;
18
+    private FabParams params;
19
+    FloatingActionButton collapsedFab;
20
+    FloatingActionButton expendedFab;
21
+    final int crossFadeAnimationDuration;
22
+
23
+    public FloatingActionButtonCoordinator(CoordinatorLayout parent, FabParams params) {
24
+        this.parent = parent;
25
+        this.params = params;
26
+        crossFadeAnimationDuration = parent.getResources().getInteger(android.R.integer.config_shortAnimTime);
27
+        createCollapsedFab();
28
+        createExpendedFab();
29
+        setStyle();
30
+    }
31
+
32
+    private void createCollapsedFab() {
33
+        collapsedFab = createFab(params.collapsedIcon);
34
+        collapsedFab.setOnClickListener(new View.OnClickListener() {
35
+            @Override
36
+            public void onClick(View v) {
37
+                collapsedFab.animate()
38
+                        .alpha(0)
39
+                        .setDuration(crossFadeAnimationDuration)
40
+                        .rotation(90)
41
+                        .setListener(new AnimatorListenerAdapter() {
42
+                            @Override
43
+                            public void onAnimationEnd(Animator animation) {
44
+                                collapsedFab.setVisibility(View.GONE);
45
+                            }
46
+                        })
47
+                        .start();
48
+                expendedFab.animate()
49
+                        .alpha(1)
50
+                        .setDuration(crossFadeAnimationDuration)
51
+                        .rotation(0)
52
+                        .setListener(new AnimatorListenerAdapter() {
53
+                            @Override
54
+                            public void onAnimationStart(Animator animation) {
55
+                                expendedFab.setVisibility(View.VISIBLE);
56
+                            }
57
+                        })
58
+                        .start();
59
+            }
60
+        });
61
+    }
62
+
63
+    private void createExpendedFab() {
64
+        expendedFab = createFab(params.expendedIcon);
65
+        expendedFab.setVisibility(View.GONE);
66
+        expendedFab.setRotation(-90);
67
+        expendedFab.setOnClickListener(new View.OnClickListener() {
68
+            @Override
69
+            public void onClick(View v) {
70
+                expendedFab.animate()
71
+                        .alpha(0)
72
+                        .setDuration(crossFadeAnimationDuration)
73
+                        .rotation(-90)
74
+                        .setListener(new AnimatorListenerAdapter() {
75
+                            @Override
76
+                            public void onAnimationEnd(Animator animation) {
77
+                                expendedFab.setVisibility(View.GONE);
78
+                            }
79
+                        })
80
+                        .start();
81
+                collapsedFab.animate()
82
+                        .alpha(1)
83
+                        .setDuration(crossFadeAnimationDuration)
84
+                        .rotation(0)
85
+                        .setListener(new AnimatorListenerAdapter() {
86
+                            @Override
87
+                            public void onAnimationStart(Animator animation) {
88
+                                collapsedFab.setVisibility(View.VISIBLE);
89
+                            }
90
+                        })
91
+                        .start();
92
+            }
93
+        });
94
+    }
95
+
96
+    private FloatingActionButton createFab(Drawable icon) {
97
+        FloatingActionButton fab = new FloatingActionButton(parent.getContext());
98
+        fab.setImageDrawable(icon);
99
+        parent.addView(fab, createFabLayoutParams());
100
+        return fab;
101
+    }
102
+
103
+    private CoordinatorLayout.LayoutParams createFabLayoutParams() {
104
+        final CoordinatorLayout.LayoutParams lp = new CoordinatorLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
105
+        lp.gravity = Gravity.RIGHT | Gravity.BOTTOM;
106
+        final int margin = (int) ViewUtils.convertDpToPixel(16);
107
+        lp.bottomMargin = margin;
108
+        lp.rightMargin = margin;
109
+        return lp;
110
+    }
111
+
112
+    private void setStyle() {
113
+
114
+    }
115
+}

+ 2
- 10
android/app/src/main/java/com/reactnativenavigation/views/SnackbarAndFabContainer.java ファイルの表示

@@ -3,19 +3,16 @@ package com.reactnativenavigation.views;
3 3
 import android.content.Context;
4 4
 import android.support.annotation.NonNull;
5 5
 import android.support.design.widget.CoordinatorLayout;
6
-import android.support.design.widget.FloatingActionButton;
7
-import android.view.Gravity;
8
-import android.view.ViewGroup;
9 6
 
10 7
 import com.reactnativenavigation.events.ScreenChangeBroadcastReceiver;
11 8
 import com.reactnativenavigation.params.FabParams;
12 9
 import com.reactnativenavigation.params.SnackbarParams;
13
-import com.reactnativenavigation.utils.ViewUtils;
14 10
 
15 11
 public class SnackbarAndFabContainer extends CoordinatorLayout implements Snakbar.OnDismissListener, ScreenChangeBroadcastReceiver.OnScreenChangeListener {
16 12
     private static final String TAG = "SnackbarAndFabContainer";
17 13
     private Snakbar snakbar;
18 14
     private ScreenChangeBroadcastReceiver screenChangeBroadcastReceiver;
15
+    private FloatingActionButtonCoordinator actionButtonCoordinator;
19 16
 
20 17
     public SnackbarAndFabContainer(Context context) {
21 18
         super(context);
@@ -54,11 +51,6 @@ public class SnackbarAndFabContainer extends CoordinatorLayout implements Snakba
54 51
     }
55 52
 
56 53
     public void showFab(@NonNull FabParams fabParams) {
57
-        FloatingActionButton fab = new FloatingActionButton(getContext());
58
-        CoordinatorLayout.LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
59
-        lp.gravity = Gravity.RIGHT | Gravity.BOTTOM;
60
-        int margin = (int) ViewUtils.convertDpToPixel(16);
61
-        lp.setMargins(0, 0, margin, margin);
62
-        addView(fab, lp);
54
+        actionButtonCoordinator = new FloatingActionButtonCoordinator(this, fabParams);
63 55
     }
64 56
 }