|
20 | 20 | import android.animation.AnimatorListenerAdapter;
|
21 | 21 | import android.animation.AnimatorSet;
|
22 | 22 | import android.animation.ObjectAnimator;
|
| 23 | +import android.annotation.SuppressLint; |
23 | 24 | import android.content.Context;
|
24 | 25 | import android.content.res.ColorStateList;
|
25 | 26 | import android.content.res.TypedArray;
|
|
32 | 33 | import android.util.AttributeSet;
|
33 | 34 | import android.util.SparseArray;
|
34 | 35 | import android.view.Gravity;
|
35 |
| -import android.view.LayoutInflater; |
36 | 36 | import android.view.Menu;
|
37 | 37 | import android.view.MotionEvent;
|
38 | 38 | import android.view.View;
|
|
41 | 41 | import android.widget.FrameLayout;
|
42 | 42 | import android.widget.ImageView;
|
43 | 43 |
|
44 |
| -import com.google.android.material.circularreveal.CircularRevealCompat; |
45 |
| -import com.google.android.material.floatingactionbutton.FloatingActionButton; |
46 |
| -import com.google.android.material.internal.NavigationMenuView; |
47 |
| -import com.google.android.material.navigation.NavigationView; |
48 |
| - |
49 | 44 | import androidx.annotation.ColorInt;
|
50 | 45 | import androidx.annotation.IdRes;
|
51 | 46 | import androidx.annotation.LayoutRes;
|
|
61 | 56 | import androidx.customview.view.AbsSavedState;
|
62 | 57 | import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat;
|
63 | 58 |
|
| 59 | +import com.google.android.material.circularreveal.CircularRevealCompat; |
| 60 | +import com.google.android.material.floatingactionbutton.FloatingActionButton; |
| 61 | +import com.google.android.material.internal.NavigationMenuView; |
| 62 | +import com.google.android.material.navigation.NavigationView; |
| 63 | + |
64 | 64 | @SuppressWarnings({"FieldCanBeLocal", "InflateParams", "RtlHardcoded", "unused", "WeakerAccess"})
|
65 | 65 | public class FloatingNavigationView extends FloatingActionButton {
|
66 | 66 |
|
@@ -113,26 +113,38 @@ public FloatingNavigationView(Context context, AttributeSet attrs, int defStyleA
|
113 | 113 |
|
114 | 114 | mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
|
115 | 115 |
|
116 |
| - mNavigationView = (CircularRevealNavigationView) LayoutInflater.from(context).inflate(R.layout.navigation_view, null); |
| 116 | + mNavigationView = new CircularRevealNavigationView(context, attrs, defStyleAttr); |
| 117 | + setupNavigationView(context, attrs); |
| 118 | + mNavigationMenuView = mNavigationView.findViewById(R.id.design_navigation_view); |
| 119 | + |
| 120 | + mFabView = new ImageView(context, attrs, defStyleAttr); |
| 121 | + setupFabView(context, attrs); |
| 122 | + |
| 123 | + // Custom attributes |
| 124 | + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FloatingNavigationView); |
| 125 | + mDrawMenuBelowFab = a.getBoolean(R.styleable.FloatingNavigationView_drawMenuBelowFab, false); |
| 126 | + a.recycle(); |
| 127 | + } |
| 128 | + |
| 129 | + @SuppressLint("ClickableViewAccessibility") |
| 130 | + private void setupNavigationView(Context context, AttributeSet attrs) { |
117 | 131 | mNavigationView.setBackground(new ColorDrawable(getBackgroundColor()));
|
118 | 132 | mNavigationView.setOnTouchListener(mNavigationTouchListener);
|
119 |
| - mNavigationMenuView = (NavigationMenuView) mNavigationView.findViewById(R.id.design_navigation_view); |
| 133 | + } |
120 | 134 |
|
121 |
| - mFabView = (ImageView) mNavigationView.findViewById(R.id.fab_view); |
| 135 | + @SuppressLint("PrivateResource") |
| 136 | + private void setupFabView(Context context, AttributeSet attrs) { |
| 137 | + TypedArray a = context.obtainStyledAttributes(attrs, new int[]{R.attr.selectableItemBackgroundBorderless}); |
| 138 | + mFabView.setScaleType(ScaleType.CENTER); |
| 139 | + mFabView.setBackground(a.getDrawable(0)); |
122 | 140 | mFabView.setOnClickListener(mFabClickListener);
|
123 | 141 | mFabView.setContentDescription(getContentDescription());
|
124 | 142 | mFabView.bringToFront();
|
125 |
| - |
126 |
| - // Custom attributes |
127 |
| - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MenuView, defStyleAttr, R.style.Widget_Design_NavigationView); |
128 |
| - if (a.hasValue(R.styleable.MenuView_menu)) { |
129 |
| - mNavigationView.inflateMenu(a.getResourceId(R.styleable.MenuView_menu, 0)); |
130 |
| - } |
131 |
| - if (a.hasValue(R.styleable.MenuView_headerLayout)) { |
132 |
| - mNavigationView.inflateHeaderView(a.getResourceId(R.styleable.MenuView_headerLayout, 0)); |
133 |
| - } |
134 |
| - mDrawMenuBelowFab = a.getBoolean(R.styleable.MenuView_drawMenuBelowFab, false); |
135 | 143 | a.recycle();
|
| 144 | + mNavigationView.addView(mFabView, new FrameLayout.LayoutParams( |
| 145 | + getResources().getDimensionPixelSize(R.dimen.design_fab_size_normal), |
| 146 | + getResources().getDimensionPixelSize(R.dimen.design_fab_size_normal) |
| 147 | + )); |
136 | 148 | }
|
137 | 149 |
|
138 | 150 | private @ColorInt int getBackgroundColor() {
|
|
0 commit comments