Exemplo n.º 1
0
        async void RestoreDragLayout(ViewGroup dragA, ViewGroup dragB, MyShadowBuilder dragShadowA, MyShadowBuilder dragShadowB)
        {
            FillLayout(dragA, 100);
            FillLayout(dragB, 100);
            FillLine();
            await Task.Delay(500);

            onFocus();
        }
Exemplo n.º 2
0
        void SetUpDragAndDrop()
        {
            /*
             * Init Drag
             */
            var dragA = _view.FindViewById <FrameLayout> (Resource.Id.stoppingPlacesCardDragOne);
            var dragB = _view.FindViewById <FrameLayout> (Resource.Id.stoppingPlacesCardDragTwo);

            var dropA = _view.FindViewById <FrameLayout> (Resource.Id.stoppingPlacesCardDropOne);
            var dropB = _view.FindViewById <FrameLayout> (Resource.Id.stoppingPlacesCardDropTwo);


            var dragAShadow = new MyShadowBuilder(dragA);
            var dragBShadow = new MyShadowBuilder(dragB);

            /*
             * Handle Drag
             */
            dragA.Touch += (object sender, View.TouchEventArgs e) => {
                var evt   = e.Event.Action;
                var point = new Point((int)e.Event.RawX, (int)e.Event.RawY);

                switch (evt)
                {
                case MotionEventActions.Down:
                    dragAShadow.lastTouch = point;
                    dragA.StartDrag(ClipData.NewPlainText("from", "A"), dragAShadow, null, 0);
                    FillLayout(dropB);
                    offFocus();
                    HideLayoutInvisible(dragA);
                    break;

                case MotionEventActions.Move:
                    dragAShadow.lastTouch = point;
                    break;

                case MotionEventActions.Up:
                    RestoreDragLayout(dragA, dragB, dragAShadow, dragBShadow);
                    break;
                }
            };

            dragB.Touch += (object sender, View.TouchEventArgs e) => {
                var evt   = e.Event.Action;
                var point = new Point((int)e.Event.RawX, (int)e.Event.RawY);

                switch (evt)
                {
                case MotionEventActions.Down:
                    dragBShadow.lastTouch = point;
                    dragB.StartDrag(ClipData.NewPlainText("from", "B"), dragBShadow, null, 0);
                    FillLayout(dropA);
                    offFocus();
                    HideLayoutInvisible(dragB);
                    break;

                case MotionEventActions.Move:
                    dragBShadow.lastTouch = point;
                    break;

                case MotionEventActions.Up:
                    RestoreDragLayout(dragA, dragB, dragAShadow, dragBShadow);
                    break;
                }
            };



            _view.Drag += (object sender, View.DragEventArgs e) => {
                var evt = e.Event;
                switch (evt.Action)
                {
                case DragAction.Drop:
                    RestoreDragLayout(dragA, dragB, dragAShadow, dragBShadow);
                    e.Handled = true;
                    break;
                }
            };

            /*
             * Handle Drop
             */
            //var dragB = _view.FindViewById<FrameLayout> (Resource.Id.stoppingPlacesCardDragTwo);
            dropA.Drag += (object sender, View.DragEventArgs e) => {
                var evt = e.Event;
                switch (evt.Action)
                {
                case DragAction.Drop:
                    e.Handled = true;

                    if (e.Event.ClipData.GetItemAt(0).Text == "B")
                    {
                        ChangeDirection();
                        HideLayout(dropA);
                        FillLayout(dragB);
                    }

                    break;

                case DragAction.Ended:
                    RestoreDragLayout(dragA, dragB, dragAShadow, dragBShadow);
                    break;
                }
            };

            dropB.Drag += (object sender, View.DragEventArgs e) => {
                var evt = e.Event;
                switch (evt.Action)
                {
                case DragAction.Drop:
                    e.Handled = true;

                    if (e.Event.ClipData.GetItemAt(0).Text == "A")
                    {
                        ChangeDirection();
                        HideLayout(dropB);
                        FillLayout(dragA);
                    }

                    break;

                case DragAction.Ended:
                    RestoreDragLayout(dragA, dragB, dragAShadow, dragBShadow);
                    break;
                }
            };
        }