diff --git a/androidarcmenu/src/main/java/com/hackplan/androidarcmenu/ArcMenuLayout.java b/androidarcmenu/src/main/java/com/hackplan/androidarcmenu/ArcMenuLayout.java index 63706a1..82618e6 100644 --- a/androidarcmenu/src/main/java/com/hackplan/androidarcmenu/ArcMenuLayout.java +++ b/androidarcmenu/src/main/java/com/hackplan/androidarcmenu/ArcMenuLayout.java @@ -5,6 +5,7 @@ import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.graphics.Canvas; import android.graphics.Point; +import android.graphics.PointF; import android.graphics.Rect; import android.support.v4.view.MotionEventCompat; import android.util.AttributeSet; @@ -18,6 +19,9 @@ import android.view.WindowManager; import com.hackplan.androidarcmenu.ArcMenu.OnClickMenuListener; +import java.util.ArrayList; +import java.util.List; + /** * Created by Dacer on 12/11/2016. */ @@ -47,33 +51,38 @@ public class ArcMenuLayout extends ViewGroup { return show; } - private float xFirst, yFirst, xEnd, yEnd; - private int radius = (int)dpToPx(80f); - private double radAlpha = Math.toRadians(90d); + private ArrayList menuPoints = new ArrayList<>(); + private int radius = (int) dpToPx(80f); + private double arcRadians = Math.toRadians(90d); + public void show(ArcMenu arcMenu, int x, int y, boolean hideOnTouchUp) { + if (getChildCount() <= 0) return; this.hideOnTouchUp = hideOnTouchUp; this.arcMenu = arcMenu; show = true; + if (x == mScreenRect.centerX() && y == mScreenRect.centerY()) y += 1; + touchPoint.set(x, y); - double radO = Math.PI - radAlpha/2 - - Math.atan((touchPoint.x - mScreenRect.centerX()) / (touchPoint.y - mScreenRect.centerY())); - double rad2 = Math.atan((touchPoint.x - mScreenRect.centerX()) / (touchPoint.y - mScreenRect.centerY())) - radAlpha/2; - xFirst = touchPoint.x - ((float) (radius * Math.sin(radO))); - yFirst = touchPoint.y + ((float) (Math.cos(radO) * radius)); - xEnd = touchPoint.x - ((float) (radius * Math.sin(rad2))); - yEnd = touchPoint.y - ((float) (Math.cos(rad2) * radius)); + menuPoints.clear(); + double alpha = Math.atan((double) (y - mScreenRect.centerY()) / (x - mScreenRect.centerX())); + if (x < mScreenRect.centerX()) alpha += Math.PI; + for (int i=0; i