Skip to content

Commit 6587d02

Browse files
committed
Add EventListener class
1 parent 8dd2299 commit 6587d02

File tree

3 files changed

+96
-2
lines changed

3 files changed

+96
-2
lines changed

circle-menu-simple-example/src/main/java/com/ramotion/circlemenu/example/simple/MainActivity.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.ramotion.circlemenu.example.simple;
22

33
import android.os.Bundle;
4+
import android.support.annotation.NonNull;
45
import android.support.v7.app.AppCompatActivity;
6+
import android.util.Log;
7+
8+
import com.ramotion.circlemenu.CircleMenuView;
59

610

711
public class MainActivity extends AppCompatActivity {
@@ -10,5 +14,38 @@ public class MainActivity extends AppCompatActivity {
1014
protected void onCreate(Bundle savedInstanceState) {
1115
super.onCreate(savedInstanceState);
1216
setContentView(R.layout.activity_main);
17+
18+
final CircleMenuView menu = (CircleMenuView) findViewById(R.id.circle_menu);
19+
menu.setEventListener(new CircleMenuView.EventListener() {
20+
@Override
21+
public void onMenuOpenAnimationStart(@NonNull CircleMenuView view) {
22+
Log.d("D", "onMenuOpenAnimationStart");
23+
}
24+
25+
@Override
26+
public void onMenuOpenAnimationEnd(@NonNull CircleMenuView view) {
27+
Log.d("D", "onMenuOpenAnimationEnd");
28+
}
29+
30+
@Override
31+
public void onMenuCloseAnimationStart(@NonNull CircleMenuView view) {
32+
Log.d("D", "onMenuCloseAnimationStart");
33+
}
34+
35+
@Override
36+
public void onMenuCloseAnimationEnd(@NonNull CircleMenuView view) {
37+
Log.d("D", "onMenuCloseAnimationEnd");
38+
}
39+
40+
@Override
41+
public void onButtonClickAnimationStart(@NonNull CircleMenuView view, int index) {
42+
Log.d("D", "onButtonClickAnimationStart| index: " + index);
43+
}
44+
45+
@Override
46+
public void onButtonClickAnimationEnd(@NonNull CircleMenuView view, int index) {
47+
Log.d("D", "onButtonClickAnimationEnd| index: " + index);
48+
}
49+
});
1350
}
1451
}

circle-menu-simple-example/src/main/res/layout/activity_main.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
xmlns:tools="http://schemas.android.com/tools"
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
7-
android:clipChildren="false"
87
tools:context="com.ramotion.circlemenu.example.simple.MainActivity">
98

109
<com.ramotion.circlemenu.CircleMenuView
10+
android:id="@+id/circle_menu"
1111
android:layout_width="300dp"
1212
android:layout_height="300dp"
1313
app:button_colors="@array/colors"

circle-menu/src/main/java/com/ramotion/circlemenu/CircleMenuView.java

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@
3232

3333
public class CircleMenuView extends FrameLayout implements View.OnClickListener {
3434

35+
public static class EventListener {
36+
public void onMenuOpenAnimationStart(@NonNull CircleMenuView view) {}
37+
public void onMenuOpenAnimationEnd(@NonNull CircleMenuView view) {}
38+
public void onMenuCloseAnimationStart(@NonNull CircleMenuView view) {}
39+
public void onMenuCloseAnimationEnd(@NonNull CircleMenuView view) {}
40+
public void onButtonClickAnimationStart(@NonNull CircleMenuView view, int buttonIndex) {}
41+
public void onButtonClickAnimationEnd(@NonNull CircleMenuView view, int buttonIndex) {}
42+
}
43+
44+
private EventListener mListener;
45+
3546
private FloatingActionButton mMenuButton;
3647
private RingEffectView mRingView;
3748

@@ -141,6 +152,30 @@ public void onClick(View view) {
141152

142153
final Animator animation = mClosedState ? getOpenMenuAnimation() : getCloseMenuAnimation();
143154
animation.setDuration(mClosedState ? mDurationClose : mDurationOpen);
155+
animation.addListener(new AnimatorListenerAdapter() {
156+
@Override
157+
public void onAnimationStart(Animator animation) {
158+
if (mListener != null) {
159+
if (mClosedState) {
160+
mListener.onMenuOpenAnimationStart(CircleMenuView.this);
161+
} else {
162+
mListener.onMenuCloseAnimationStart(CircleMenuView.this);
163+
}
164+
}
165+
}
166+
@Override
167+
public void onAnimationEnd(Animator animation) {
168+
animation.removeListener(this);
169+
if (mListener != null) {
170+
if (mClosedState) {
171+
mListener.onMenuOpenAnimationEnd(CircleMenuView.this);
172+
} else {
173+
mListener.onMenuCloseAnimationEnd(CircleMenuView.this);
174+
}
175+
}
176+
}
177+
});
178+
144179
animation.start();
145180
}
146181
});
@@ -199,13 +234,27 @@ protected void onLayout(boolean changed, int left, int top, int right, int botto
199234
}
200235

201236
@Override
202-
public void onClick(View view) {
237+
public void onClick(final View view) {
203238
if (mIsAnimating) {
204239
return;
205240
}
206241

207242
final Animator click = getButtonClickAnimation((FloatingActionButton)view);
208243
click.setDuration(mDurationRing);
244+
click.addListener(new AnimatorListenerAdapter() {
245+
@Override
246+
public void onAnimationStart(Animator animation) {
247+
if (mListener != null) {
248+
mListener.onButtonClickAnimationStart(CircleMenuView.this, mButtons.indexOf(view));
249+
}
250+
}
251+
@Override
252+
public void onAnimationEnd(Animator animation) {
253+
if (mListener != null) {
254+
mListener.onButtonClickAnimationEnd(CircleMenuView.this, mButtons.indexOf(view));
255+
}
256+
}
257+
});
209258
click.start();
210259
}
211260

@@ -452,4 +501,12 @@ public float getDistance() {
452501
return mDistance;
453502
}
454503

504+
public void setEventListener(EventListener listener) {
505+
mListener = listener;
506+
}
507+
508+
public EventListener getEventListener() {
509+
return mListener;
510+
}
511+
455512
}

0 commit comments

Comments
 (0)