public bool dispatchTouchEvent(MotionEvent ev)
        {
            float x = ev.GetX();
            float y = ev.GetY();


            switch (ev.Action)
            {
            case MotionEventActions.Down:

                mLastX    = x;
                mLastY    = y;
                mDownTime = Java.Lang.JavaSystem.CurrentTimeMillis();
                mTmpAngle = 0;

                if (isFling)
                {
                    //RemoveCallbacks(mFlingRunnable);
                    isFling = false;
                    return(true);
                }

                break;

            case MotionEventActions.Move:


                float start = getAngle(mLastX, mLastY);

                float end = getAngle(x, y);

                // Console.WriteLine("TAG", "start = " + start + " , end =" + end);
                if (getQuadrant(x, y) == 1 || getQuadrant(x, y) == 4)
                {
                    mStartAngle += end - start;
                    mTmpAngle   += end - start;
                }
                else
                {
                    mStartAngle += start - end;
                    mTmpAngle   += start - end;
                }

                RequestLayout();

                mLastX = x;
                mLastY = y;

                break;

            case MotionEventActions.Up:

                float anglePerSecond2 = mTmpAngle * 1000
                                        / (Java.Lang.JavaSystem.CurrentTimeMillis() - mDownTime);

                // Console.WriteLine("TAG anglePrMillionSecond + "+  mTmpAngle +" =  +"+
                //  mTmpAngle);

                if (Math.Abs(anglePerSecond2) > mFlingableValue && !isFling)
                {
                    AutoFlingEvent AutoFlingPost = new AutoFlingEvent();
                    AutoFlingPost.AutoFlingFinished += OnAutoFlingFinished;
                    // new CircleMenuEventArgs() { velocity = anglePerSecond2 };
                    // AutoFlingHandler.Post(mFlingRunnable = (new AutoFlingEvent.AutoFlingDelegate(anglePerSecond2)));

                    return(true);
                }

                if (Math.Abs(mTmpAngle) > NOCLICK_VALUE)
                {
                    return(true);
                }

                break;
            }
            return(true);
            // return base.DispatchTouchEvent(ev);
        }
        public bool dispatchTouchEvent(MotionEvent ev)
        {
            float x = ev.GetX();
            float y = ev.GetY();

            switch (ev.Action)
            {
            case MotionEventActions.Down:

                mLastX    = x;
                mLastY    = y;
                mDownTime = Java.Lang.JavaSystem.CurrentTimeMillis();
                mTmpAngle = 0;

                if (isFling)
                {
                    RemoveCallbacks(mFlingRunnable);
                    isFling = false;
                    return(true);
                }

                break;

            case MotionEventActions.Move:


                float start = getAngle(mLastX, mLastY);

                float end = getAngle(x, y);

                // Log.e("TAG", "start = " + start + " , end =" + end);
                if (getQuadrant(x, y) == 1 || getQuadrant(x, y) == 4)
                {
                    mStartAngle += end - start;
                    mTmpAngle   += end - start;
                }
                else
                {
                    mStartAngle += start - end;
                    mTmpAngle   += start - end;
                }

                RequestLayout();

                mLastX = x;
                mLastY = y;

                break;

            case MotionEventActions.Up:

                float anglePerSecond2 = mTmpAngle * 1000
                                        / (Java.Lang.JavaSystem.CurrentTimeMillis() - mDownTime);

                // Log.e("TAG", anglePrMillionSecond + " , mTmpAngel = " +
                // mTmpAngle);

                if (Math.Abs(anglePerSecond2) > mFlingableValue && !isFling)
                {
                    Post(mFlingRunnable = (AutoFlingRunnable(anglePerSecond2)));

                    return(true);
                }

                if (Math.Abs(mTmpAngle) > NOCLICK_VALUE)
                {
                    return(true);
                }

                break;
            }
            return(true);
            // return base.DispatchTouchEvent(ev);
        }
 public CircleMenuLayout(Context context, IAttributeSet attrs) : base(context, attrs)
 {
     mFlingRunnable = new AutoFlingEvent();
     mFlingRunnable.AutoFlingHandler += OnFinished;
     mFlingRunnable.CreateFlingObject();
 }
        public CircleMenuLayout(Context context, IAttributeSet attrs) : base(context, attrs)
        {
            AutoFlingEvent AutoFling = new AutoFlingEvent();

            AutoFling.AutoFlingFinished += OnAutoFlingFinished;
        }