@@ -46,6 +46,7 @@ public class SquareMenu extends View {
4646 // Custom values
4747 private int fabWidth = FAB_SIZE , fabHeight = FAB_SIZE ;
4848 private int fabColor = FAB_COLOR ;
49+ private boolean autoClose = false ;
4950 private String menuOpenDirection = DEFAULT_DIRECTION ;
5051 private Paint paintFAB , paintFabBG , paintFabBGWidShadow , paintFabBGWithoutShadow , paintFabPlus , paintIcons ;
5152
@@ -75,6 +76,7 @@ private void setupAttributes(AttributeSet attrs) {
7576 // Extract custom attributes into member variables
7677 Drawable iconM1 , iconM2 , iconM3 ;
7778 try {
79+ autoClose = a .getBoolean (R .styleable .SquareMenu_autoClose , false );
7880 fabColor = a .getColor (R .styleable .SquareMenu_fabColor , FAB_COLOR );
7981 fabWidth = fabHeight = a .getInteger (R .styleable .SquareMenu_squareFabSize , FAB_SIZE );
8082 menuOpenDirection = a .getString (R .styleable .SquareMenu_menuOpenDirection );
@@ -308,25 +310,32 @@ private void touch4TopLeftMenu(MotionEvent event) {
308310 else {
309311 // Touch of BOTTOM_RIGHT
310312 if (event .getX () > fabWidth && event .getY () > fabHeight ) {
311- isOpened = false ;
312- resetAnimationTopLeftMenu ();
313- if (onMenuClickListener !=null )onMenuClickListener .onMenuClose ();
313+ closeTopLeftM ();
314314 }
315315 // Touch of TOP-LEFT
316316 else if (event .getX () < fabWidth && event .getY () < fabHeight ) {
317317 if (onMenuClickListener !=null )onMenuClickListener .onClickMenu2 ();
318+ if (autoClose )closeTopLeftM ();
318319 }
319320 // Touch of TOP-RIGHT
320321 else if (event .getX () > fabWidth && event .getY () < fabHeight ) {
321322 if (onMenuClickListener !=null )onMenuClickListener .onClickMenu3 ();
323+ if (autoClose )closeTopLeftM ();
322324 }
323325 // Touch of BOTTOM-LEFT
324326 else if (event .getX () < fabWidth && event .getY () > fabHeight ) {
325327 if (onMenuClickListener !=null )onMenuClickListener .onClickMenu1 ();
328+ if (autoClose )closeTopLeftM ();
326329 }
327330 }
328331 }
329332
333+ private void closeTopLeftM (){
334+ isOpened = false ;
335+ resetAnimationTopLeftMenu ();
336+ if (onMenuClickListener !=null )onMenuClickListener .onMenuClose ();
337+ }
338+
330339 private void touch4TopRightMenu (MotionEvent event ) {
331340 Log .i (TAG , "touch4TopRightMenu" );
332341 if (!isOpened ) {
@@ -339,25 +348,32 @@ private void touch4TopRightMenu(MotionEvent event) {
339348 else {
340349 // Touch of BOTTOM_LEFT
341350 if (event .getX () < fabWidth && event .getY () > fabHeight ) {
342- isOpened = false ;
343- resetAnimationTopRightMenu ();
344- if (onMenuClickListener !=null )onMenuClickListener .onMenuClose ();
351+ closeTopRightM ();
345352 }
346353 // Touch of TOP-RIGHT
347354 else if (event .getX () > fabWidth && event .getY () < fabHeight ) {
348355 if (onMenuClickListener !=null )onMenuClickListener .onClickMenu2 ();
356+ if (autoClose ) closeTopRightM ();
349357 }
350358 // Touch of TOP-LEFT
351359 else if (event .getX () < fabWidth && event .getY () < fabHeight ) {
352360 if (onMenuClickListener !=null )onMenuClickListener .onClickMenu3 ();
361+ if (autoClose ) closeTopRightM ();
353362 }
354363 // Touch of BOTTOM-RIGHT
355364 else if (event .getX () > fabWidth && event .getY () > fabHeight ) {
356365 if (onMenuClickListener !=null )onMenuClickListener .onClickMenu1 ();
366+ if (autoClose ) closeTopRightM ();
357367 }
358368 }
359369 }
360370
371+ private void closeTopRightM (){
372+ isOpened = false ;
373+ resetAnimationTopRightMenu ();
374+ if (onMenuClickListener !=null )onMenuClickListener .onMenuClose ();
375+ }
376+
361377 private void startAnimationTopRightMenu () {
362378 // Setup Background and Foreground Shadow
363379 paintFabBG = paintFabBGWithoutShadow ;
@@ -629,6 +645,13 @@ public void setFABColor(int color) {
629645 requestLayout ();
630646 }
631647
648+ /**
649+ * @param autoClose true or false : default is false
650+ */
651+ public void setAutoClose (boolean autoClose ) {
652+ this .autoClose = autoClose ;
653+ }
654+
632655 /**
633656 * Register callbacks to be invoked when this Menu is clicked.
634657 *
0 commit comments