33import android .app .Activity ;
44import android .graphics .Rect ;
55import android .support .annotation .DrawableRes ;
6+ import android .support .v7 .widget .RecyclerView ;
67import android .view .MotionEvent ;
78import android .view .View ;
89import android .view .ViewGroup ;
1819
1920public class ArcMenu {
2021
21- public interface OnClickBtnListener {
22- void onClickArcMenu (View menuView , int viewId );
22+ public interface OnClickMenuListener {
23+ void onClickArcMenu (ArcMenu arcMenu , int clickedMenuId );
2324 }
2425
25- private ArcMenuInterceptLayout arcLayout ;
26- private ArrayList <ArcButton .Builder > btnList ;
27- private boolean hideOnTouchUp ;
26+ private Builder builder ;
2827
29- private ArcMenu (ArcMenuInterceptLayout arcLayout , ArrayList <ArcButton .Builder > btnList ,
30- OnClickBtnListener listener , boolean hideOnTouchUp ) {
31- this .arcLayout = arcLayout ;
32- this .btnList = btnList ;
33- this .hideOnTouchUp = hideOnTouchUp ;
34- arcLayout .setOnClickBtnListener (listener );
28+ private ArcMenu (Builder builder ) {
29+ this .builder = builder ;
3530 }
3631
3732 public void showOn (View view ) {
3833 if (view == null ) return ;
3934 Rect rect = new Rect ();
4035 view .getGlobalVisibleRect (rect );
41- arcLayout .show (rect .centerX (), rect .centerY (), btnList , hideOnTouchUp );
36+ builder .arcMenuLayout .show (this , rect .centerX (),
37+ rect .centerY (),
38+ builder .btnList ,
39+ builder .hideOnTouchUp );
4240 }
4341
44- public static class Builder implements View .OnTouchListener , View .OnLongClickListener {
42+ public int getId () {
43+ return builder .id ;
44+ }
45+
46+ public static class Builder {
47+ private int id = -1 ;
48+ private ArcMenu arcMenu ;
4549 private ArrayList <ArcButton .Builder > btnList = new ArrayList <>();
46- private OnClickBtnListener onClickBtnListener ;
50+ private OnClickMenuListener onClickMenuListener ;
4751 private Activity activity ;
4852 private ArcMenuInterceptLayout arcMenuLayout ;
4953 private HashSet <View > onTouchViews = new HashSet <>();
@@ -55,12 +59,20 @@ public Builder(Activity activity) {
5559 }
5660
5761 public ArcMenu build () {
62+ if (arcMenu != null ) throw new RuntimeException ("ArcMenu.Build already built" );
5863 arcMenuLayout = attachToActivity (activity );
59- return new ArcMenu (arcMenuLayout , btnList , onClickBtnListener , hideOnTouchUp );
64+ arcMenuLayout .setOnClickBtnListener (onClickMenuListener );
65+ arcMenu = new ArcMenu (this );
66+ return arcMenu ;
67+ }
68+
69+ public Builder setId (int id ){
70+ this .id = id ;
71+ return this ;
6072 }
6173
62- public Builder setListener (OnClickBtnListener listener ) {
63- this .onClickBtnListener = listener ;
74+ public Builder setListener (OnClickMenuListener listener ) {
75+ this .onClickMenuListener = listener ;
6476 return this ;
6577 }
6678
@@ -76,13 +88,13 @@ public Builder addBtns(ArcButton.Builder... arcButtons) {
7688
7789 public Builder showOnTouch (View view ) {
7890 onTouchViews .add (view );
79- view .setOnTouchListener (this );
91+ view .setOnTouchListener (touchListener );
8092 return this ;
8193 }
8294
8395 public Builder showOnLongClick (View view ) {
84- view .setOnTouchListener (this );
85- view .setOnLongClickListener (this );
96+ view .setOnTouchListener (touchListener );
97+ view .setOnLongClickListener (longClickListener );
8698 return this ;
8799 }
88100
@@ -91,27 +103,34 @@ public Builder hideOnTouchUp(boolean h) {
91103 return this ;
92104 }
93105
94- @ Override
95- public boolean onLongClick (View v ) {
96- arcMenuLayout .show (lastTouchX , lastTouchY , btnList , hideOnTouchUp );
97- return true ;
98- }
106+
107+ private View .OnLongClickListener longClickListener = new View .OnLongClickListener () {
108+ @ Override
109+ public boolean onLongClick (View v ) {
110+ arcMenuLayout .show (arcMenu , lastTouchX , lastTouchY , btnList , hideOnTouchUp );
111+ return true ;
112+ }
113+ };
99114
100115 private int lastTouchX , lastTouchY ;
101- @ Override
102- public boolean onTouch (View v , MotionEvent event ) {
103- if (event .getAction () == MotionEvent .ACTION_DOWN ){
104- if (onTouchViews .contains (v )) {
105- arcMenuLayout .show ((int ) event .getRawX (), (int ) event .getRawY (),
106- btnList , hideOnTouchUp );
107- }else {
108- //Used in onLongClick(View v)
109- lastTouchX = (int ) event .getRawX ();
110- lastTouchY = (int ) event .getRawY ();
116+ private View .OnTouchListener touchListener = new View .OnTouchListener () {
117+ @ Override
118+ public boolean onTouch (View v , MotionEvent event ) {
119+ if (event .getAction () == MotionEvent .ACTION_DOWN ){
120+ if (onTouchViews .contains (v )) {
121+ arcMenuLayout .show (arcMenu ,
122+ (int ) event .getRawX (),
123+ (int ) event .getRawY (),
124+ btnList , hideOnTouchUp );
125+ }else {
126+ //Used in onLongClick(View v)
127+ lastTouchX = (int ) event .getRawX ();
128+ lastTouchY = (int ) event .getRawY ();
129+ }
111130 }
131+ return false ;
112132 }
113- return false ;
114- }
133+ };
115134
116135 ArcMenuInterceptLayout attachToActivity (Activity activity ) {
117136 ViewGroup decorView = (ViewGroup ) activity .getWindow ().getDecorView ();
0 commit comments