예제 #1
0
            public GestureDetector(FrameLayout v, Context c)
            {
                var iv = new ImageView(c);

                iv.SetImageResource(Resource.Drawable.touch_100_white);
                int size     = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 50, Resources.System.DisplayMetrics);
                int halfSize = size / 2;

                layoutParams        = new FrameLayout.LayoutParams(size, size);
                iv.LayoutParameters = layoutParams;
                iv.Visibility       = ViewStates.Gone;

                v.AddView(iv);

                v.Touch += delegate(object sender, View.TouchEventArgs args)
                {
                    float curX = args.Event.GetX();
                    float curY = args.Event.GetY();

                    layoutParams.MarginStart = (int)curX - halfSize;
                    layoutParams.TopMargin   = (int)curY - halfSize;
                    iv.LayoutParameters      = layoutParams;

                    switch (args.Event.ActionMasked)
                    {
                    case MotionEventActions.Down:
                        moved     = false;
                        startX    = curX;
                        startY    = curY;
                        timeStart = CurrentTimeMillis();
                        FadeVisibility(true, iv);
                        //iv.Visibility = ViewStates.Visible;
                        break;

                    case MotionEventActions.Move:
                        moved = true;
                        break;

                    case MotionEventActions.Up:
                        timeEnd = CurrentTimeMillis();

                        /*Toast.MakeText(Application.Context,
                         *      $"TIME: {timeEnd - timeStart}\nPIXEL: {(curX - startX) + (curY - startY)}",
                         *      ToastLength.Short)
                         *  .Show();*/
                        if (!moved)
                        {
                            OnGestureEvent?.Invoke(5);
                        }
                        else
                        {
                            OnMove(startX, startY, curX, curY, timeStart, timeEnd);
                        }
                        FadeVisibility(false, iv);
                        //iv.Visibility = ViewStates.Invisible;
                        break;
                    }
                };
            }