Пример #1
0
    /// <summary>
    /// ステータスによって文字列を返す
    /// </summary>
    /// <param name="touchStatus">ステータス</param>
    /// <returns>状態の文字列</returns>
    public static string GetStatusString(TouchStatus touchStatus)
    {
        switch (touchStatus)
        {
        case TouchStatus.kNone:
            return("None");

        case TouchStatus.kBegan:
            return("Began");

        case TouchStatus.kMoved:
            return("Moved");

        case TouchStatus.kStationary:
            return("Stationary");

        case TouchStatus.kEnded:
            return("Ended");

        case TouchStatus.kCanceled:
            return("Canceled");

        default:
            return("Unknown");
        }
    }
Пример #2
0
        public void Update()
        {
            List <TouchData> touches = Touch.GetData(0);

            foreach (TouchData data in touches)
            {
                currentTouchStatus = data.Status;                 // never gets used

                float xPos = (data.X + 0.5f) * screenWidth;
                float yPos = screenHeight - ((data.Y + 0.5f) * screenHeight);

                if (data.Status == TouchStatus.Move)
                {
//					Console.WriteLine("x : " +  xPos);
//					Console.WriteLine("y : " +  yPos);
                    position = new Vector2(xPos, yPos);
                    touching = true;
                }
                else
                {
                    touching = false;
                }
            }
            previousTouchData = currentTouchStatus;             // never gets used
            sprite.Position   = position;
            sprite.CenterSprite();
        }
Пример #3
0
    //set status for TouchStatus (swipe, pick, idle)
    void updateStatus(float dt)
    {
        //step 0. check touch status idle
        if (touchStatus == TouchStatus.idle)
        {
            //step 1. check normal distance
            if (_normalDistance > 0.05)
            {
                //step 2. compare x with y
                if (Mathf.Abs(_elapsedNormalPosition.x) > Mathf.Abs(_elapsedNormalPosition.y))
                {
                    touchStatus = TouchStatus.swipe;
                }
                else
                {
                    touchStatus = TouchStatus.pick;
                }
            }
            else
            {
                touchStatus = TouchStatus.idle;
            }
        }

        //step 3. release
        if (updateTickList == null)
        {
            touchStatus = TouchStatus.idle;
        }
    }
Пример #4
0
        /// <summary>
        /// 点击中
        /// </summary>
        /// <param name="pointPos"></param>
        protected virtual void OnTouch(Vector3 curPos)
        {
            m_longPressTimer += Time.deltaTime;
            m_curPos          = curPos;

            if (m_touchStatus != TouchStatus.Moving)
            {
                m_moveDis = Vector2.Distance(m_pointPos, m_curPos);
                if (m_moveDis >= m_inputManager.m_moveTolerace)
                {
                    m_touchStatus = TouchStatus.Moving;
                    m_inputManager.InvokeInput(InputType.OnMoveBegin, m_curPos);
                }

                if (m_touchStatus == TouchStatus.Touch && m_longPressTimer >= m_inputManager.m_longPressSpan)
                {
                    m_touchStatus = TouchStatus.LongPress;
                    m_inputManager.InvokeInput(InputType.OnLongPress, m_curPos);
                }
            }
            else
            {
                m_inputManager.InvokeInput(InputType.OnMove, m_curPos);
            }
        }
        internal void HandleTouch(TouchEffect sender, TouchStatus status)
        {
            if (sender.IsDisabled)
            {
                return;
            }

            var canExecuteAction = sender.CanExecute;

            if (status != TouchStatus.Started || canExecuteAction)
            {
                if (!canExecuteAction)
                {
                    status = TouchStatus.Canceled;
                }

                var state = status == TouchStatus.Started
                                        ? TouchState.Pressed
                                        : TouchState.Normal;

                if (status == TouchStatus.Started)
                {
                    animationProgress = 0;
                    animationState    = state;
                }

                var isToggled = sender.IsToggled;
                if (isToggled.HasValue)
                {
                    if (status != TouchStatus.Started)
                    {
                        durationMultiplier = (animationState == TouchState.Pressed && !isToggled.Value) ||
                                             (animationState == TouchState.Normal && isToggled.Value)
                                                        ? 1 - animationProgress
                                                        : animationProgress;

                        UpdateStatusAndState(sender, status, state);
                        if (status == TouchStatus.Canceled)
                        {
                            sender.ForceUpdateState(false);
                            return;
                        }
                        OnTapped(sender);
                        sender.IsToggled = !isToggled;
                        return;
                    }

                    state = isToggled.Value
                                                ? TouchState.Normal
                                                : TouchState.Pressed;
                }

                UpdateStatusAndState(sender, status, state);
            }

            if (status == TouchStatus.Completed)
            {
                OnTapped(sender);
            }
        }
Пример #6
0
 public void OnPointerUp(PointerEventData eventData)
 {
     if (status != TouchStatus.Exit)
     {
         status = TouchStatus.Exit; onLeave?.Invoke();
     }
 }
 void ReleaseDesignerOutlets()
 {
     if (DoubleTouchImage != null)
     {
         DoubleTouchImage.Dispose();
         DoubleTouchImage = null;
     }
     if (DragImage != null)
     {
         DragImage.Dispose();
         DragImage = null;
     }
     if (TouchImage != null)
     {
         TouchImage.Dispose();
         TouchImage = null;
     }
     if (TouchStatus != null)
     {
         TouchStatus.Dispose();
         TouchStatus = null;
     }
     if (TouchView != null)
     {
         TouchView.Dispose();
         TouchView = null;
     }
 }
Пример #8
0
        public void HandleTouch(TouchStatus status, UserInteractionState?userInteractionState = null)
        {
            if (IsCanceled || _effect == null)
            {
                return;
            }

            if (_effect?.IsDisabled ?? true)
            {
                return;
            }

            _effect.HandleTouch(status);
            if (userInteractionState.HasValue)
            {
                _effect?.HandleUserInteraction(userInteractionState.Value);
            }

            if (_effect == null || !_effect.NativeAnimation || !_effect.CanExecute)
            {
                return;
            }
            var control  = _effect.Control;
            var renderer = control?.GetRenderer() as UIView;

            if (renderer == null)
            {
                return;
            }

            var color        = _effect.NativeAnimationColor;
            var radius       = _effect.NativeAnimationRadius;
            var shadowRadius = _effect.NativeAnimationShadowRadius;
            var isStarted    = status == TouchStatus.Started;

            _defaultRadius        = (float?)(_defaultRadius ?? renderer.Layer.CornerRadius);
            _defaultShadowRadius  = (float?)(_defaultShadowRadius ?? renderer.Layer.ShadowRadius);
            _defaultShadowOpacity = _defaultShadowOpacity ?? renderer.Layer.ShadowOpacity;


            UIView.AnimateAsync(.2, () =>
            {
                if (color == Color.Default)
                {
                    renderer.Layer.Opacity = isStarted ? 0.5f : (float)control.Opacity;
                }
                else
                {
                    renderer.Layer.BackgroundColor = (isStarted ? color : control.BackgroundColor).ToCGColor();
                }
                renderer.Layer.CornerRadius = isStarted ? radius : _defaultRadius.GetValueOrDefault();

                if (shadowRadius >= 0)
                {
                    renderer.Layer.ShadowRadius  = isStarted ? shadowRadius : _defaultShadowRadius.GetValueOrDefault();
                    renderer.Layer.ShadowOpacity = isStarted ? 0.7f : _defaultShadowOpacity.GetValueOrDefault();
                }
            });
        }
Пример #9
0
        public void Update(float deltaTime)
        {
            if(UnityEngine.Input.touchCount == 0)
            {
                Status = TouchStatus.None;
                return;
            }

            Touch touch = UnityEngine.Input.GetTouch(0);

            //if you currently aren't pressing the screen then grab the first finger
            if(Status == TouchStatus.None)
            {
                m_lastFingerId = touch.fingerId;
            }

            bool foundTouch = false;

            //find the right touch for the finger id
            for(int i = 0; i < UnityEngine.Input.touchCount; i++)
            {
                if(UnityEngine.Input.GetTouch(i).fingerId == m_lastFingerId)
                {
                    touch = UnityEngine.Input.GetTouch(i);
                    foundTouch = true;
                }
            }

            if(!foundTouch)
            {
                return;
            }

            if(touch.phase == TouchPhase.Began)
            {
                Status = TouchStatus.Pressed;
                HeldTime = 0.0f;
                PressedLocation = touch.position;
                ReleasedLocation = touch.position;
                SendEvent(0);
            }
            else if(touch.phase == TouchPhase.Canceled || touch.phase == TouchPhase.Ended)
            {
                Status = TouchStatus.Released;
                ReleasedLocation = touch.position;
                SendEvent(0);
            }
            else if(touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)
            {
                Status = TouchStatus.Held;
                HeldTime += deltaTime;
                ReleasedLocation = touch.position;
                SendEvent(0);
            }
            else
            {
                Status = TouchStatus.None;
            }
        }
Пример #10
0
        /// <summary>
        /// 开始点击
        /// </summary>
        /// <param name="pointPos"></param>
        protected virtual void OnTouchStart(Vector3 curPos)
        {
            m_touchStatus    = TouchStatus.Touch;
            m_pointPos       = curPos;
            m_curPos         = curPos;
            m_longPressTimer = 0;

            InputManager.Instance.DispatchEvent(InputType.OnTouchBegin, m_pointPos);
        }
Пример #11
0
        /// <summary>
        /// 开始点击
        /// </summary>
        /// <param name="pointPos"></param>
        protected virtual void OnTouchStart(Vector3 curPos)
        {
            m_touchStatus    = TouchStatus.Touch;
            m_pointPos       = curPos;
            m_curPos         = curPos;
            m_longPressTimer = 0;

            m_inputManager.InvokeInput(InputType.OnTouchBegin, m_pointPos);
        }
Пример #12
0
        private bool ContainStatusPrev(List <TouchData> list, TouchStatus queryStatus)
        {
            bool isContain = false;

            foreach (TouchData data in list)
            {
                isContain |= data.Status == queryStatus;
            }
            return(isContain);
        }
 void UpdateStatusAndState(TouchEffect sender, TouchStatus status, TouchState state)
 {
     if (sender.State != state || status != TouchStatus.Canceled)
     {
         sender.State = state;
         sender.RaiseStateChanged();
     }
     sender.Status = status;
     sender.RaiseStatusChanged();
 }
Пример #14
0
        public void OnPointerDown(PointerEventData eventData)
        {
            press_number = 0;

            press_timer = Time.time + interval;

            onEnter?.Invoke();

            status = TouchStatus.Enter;
        }
Пример #15
0
 private void HandleEnd(TouchStatus status)
 {
     if (_canceled)
     {
         return;
     }
     if (_effect.DisallowTouchThreshold > 0)
     {
         Container.Parent?.RequestDisallowInterceptTouchEvent(false);
     }
     Element.GetTouchEff().HandleTouch(status);
     EndRipple();
 }
Пример #16
0
 private void HandleEnd(TouchStatus status)
 {
     if (IsCanceled)
     {
         return;
     }
     IsCanceled = true;
     if (_effect.DisallowTouchThreshold > 0)
     {
         Group.Parent?.RequestDisallowInterceptTouchEvent(false);
     }
     _effect?.HandleTouch(status);
     EndRipple();
 }
    public static int get_m_currentPosition(IntPtr l)
    {
        int result;

        try
        {
            TouchStatus touchStatus = (TouchStatus)LuaObject.checkSelf(l);
            LuaObject.pushValue(l, true);
            LuaObject.pushValue(l, touchStatus.m_currentPosition);
            result = 2;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
Пример #18
0
        void HandleEnd(TouchStatus status)
        {
            if (IsCanceled)
            {
                return;
            }

            IsCanceled = true;
            if (effect.DisallowTouchThreshold > 0)
            {
                Group.Parent?.RequestDisallowInterceptTouchEvent(false);
            }

            effect?.HandleTouch(status);
            effect?.HandleUserInteraction(TouchInteractionStatus.Completed);
            EndRipple();
        }
    public static int constructor(IntPtr l)
    {
        int result;

        try
        {
            TouchStatus o = new TouchStatus();
            LuaObject.pushValue(l, true);
            LuaObject.pushValue(l, o);
            result = 2;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
    public static int set_m_pressed(IntPtr l)
    {
        int result;

        try
        {
            TouchStatus touchStatus = (TouchStatus)LuaObject.checkSelf(l);
            bool        pressed;
            LuaObject.checkType(l, 2, out pressed);
            touchStatus.m_pressed = pressed;
            LuaObject.pushValue(l, true);
            result = 1;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
    public static int set_m_beginPosition(IntPtr l)
    {
        int result;

        try
        {
            TouchStatus touchStatus = (TouchStatus)LuaObject.checkSelf(l);
            Vector2     beginPosition;
            LuaObject.checkType(l, 2, out beginPosition);
            touchStatus.m_beginPosition = beginPosition;
            LuaObject.pushValue(l, true);
            result = 1;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
Пример #22
0
        //public bool OnTouch(Android.Views.View v, MotionEvent e)
        //{

        //    int[] viewCoords = new int[2];
        //    int[] viewCoords2 = new int[2];
        //    GetLocationOnScreen(viewCoords);
        //    GetLocationInWindow(viewCoords2);
        //    int touchX = (int)e.RawX;
        //    int touchY = (int)e.RawY;

        //    int positionOnViewX = touchX - viewCoords[0];
        //    int positionOnViewY = touchY - viewCoords[1];

        //    return true;
        //}


        public override bool OnTouchEvent(MotionEvent e)
        {
            var xamarinControl = Element as CustomControlTest;

            TouchStatus touchStatus = TouchStatus.None;

            //int[] viewCoords = new int[2];
            //GetLocationOnScreen(viewCoords);

            //int touchX = (int)e.RawX;
            //int touchY = (int)e.RawY;

            //int positionOnViewX = touchX - viewCoords[0];
            //int positionOnViewY = touchY - viewCoords[1];

            switch (e.ActionMasked)
            {
            case MotionEventActions.Down:
            case MotionEventActions.PointerDown:
                touchStatus = TouchStatus.TouchDown;
                break;

            case MotionEventActions.Up:
            case MotionEventActions.PointerUp:
                touchStatus = TouchStatus.TouchUp;
                break;

            case MotionEventActions.Move:
                touchStatus = TouchStatus.TouchMove;
                break;
            }

            try
            {
                xamarinControl.OnTouchEvent(touchStatus, e.GetPointerId(e.ActionIndex), (int)e.RawX, (int)e.RawY);
            }
            catch (Exception)
            {
            }

            return(true);
        }
Пример #23
0
        //protected override void OnSizeAllocated(double width, double height)
        //{
        //    base.OnSizeAllocated(width, height);

        //}

        //protected override void OnParentSet()
        //{
        //    base.OnParentSet();

        //    CenterJoy();
        //}

        public void OnTouchEvent(TouchStatus touchStatus, int touchId, float x, float y)
        {
            if (touchStatus == TouchStatus.TouchDown && !_moveOn && IsJoyInside(x, y))
            {
                _moveOn      = true;
                _moveTouchId = touchId;

                _initialTouchX = x;
                _InitialTouchY = y;
            }
            else if (touchStatus == TouchStatus.TouchMove && _moveOn && _moveTouchId == touchId)
            {
                MoveJoy(x, y);
                FillPositions();
            }
            else if (touchStatus == TouchStatus.TouchUp && _moveOn && _moveTouchId == touchId)
            {
                _moveOn = false;
                CenterJoy();
                FillPositions();
            }
        }
Пример #24
0
        protected virtual void OnTouchEnd(Vector3 curPos)
        {
            m_curPos = curPos;

            if (m_touchStatus == TouchStatus.Moving)
            {
                m_inputManager.InvokeInput(InputType.OnMoveEnd, m_curPos);
            }
            if (m_touchStatus == TouchStatus.LongPress)
            {
                m_inputManager.InvokeInput(InputType.OnEndLongPress, m_curPos);
            }
            if (m_touchStatus == TouchStatus.Touch)
            {
                m_inputManager.InvokeInput(InputType.OnClick, m_curPos);
            }

            m_inputManager.InvokeInput(InputType.OnTouchEnd, m_curPos);

            m_touchStatus = TouchStatus.None;
            m_isTouchOnUI = false;
        }
Пример #25
0
 private void DoBeginDrag(Vector2 pos)
 {
     m_status = TouchStatus.Dragging;
     BeginDragEvent?.Invoke(pos);
 }
Пример #26
0
        public void HandleTouch(TouchStatus status, TouchInteractionStatus?touchInteractionStatus = null)
        {
            if (IsCanceled || effect == null)
            {
                return;
            }

            if (effect?.IsDisabled ?? true)
            {
                return;
            }

            if (touchInteractionStatus == TouchInteractionStatus.Started)
            {
                effect?.HandleUserInteraction(TouchInteractionStatus.Started);
                touchInteractionStatus = null;
            }

            effect.HandleTouch(status);
            if (touchInteractionStatus.HasValue)
            {
                effect.HandleUserInteraction(touchInteractionStatus.Value);
            }

            if (!effect.NativeAnimation)
            {
                return;
            }

            if (longTapStarted && !tapCompleted)
            {
                return;
            }

            var control = effect.Element;

            if (!(Platform.GetOrCreateRenderer(control)?.NativeView is Widget nativeView))
            {
                return;
            }

            if (status == TouchStatus.Started)
            {
                var startColor = nativeView.BackgroundColor;
                if (startColor.IsDefault)
                {
                    return;
                }

                var endColor = effect.NativeAnimationColor.ToNative();
                if (endColor.IsDefault)
                {
                    startColor = EColor.FromRgba(startColor.R, startColor.G, startColor.B, startColor.A / 2);
                    endColor   = startColor;
                }

                var transit = new Transit
                {
                    Repeat   = 1,
                    Duration = .2
                };
                var colorEffect = new ColorEffect(startColor, endColor);
                colorEffect.EffectEnded += (s, e) => { transit?.Dispose(); };
                transit.Objects.Add(nativeView);
                transit.AddEffect(colorEffect);
                transit.Go(.2);
            }
        }
Пример #27
0
 // 情報をコピーする
 public void Copy(TouchInfo copySource)
 {
     touchId  = copySource.touchId;
     position = copySource.position;
     status   = copySource.status;
 }
Пример #28
0
 /// <summary>
 /// 重置状态
 /// </summary>
 protected virtual void Reset()
 {
     m_isTouchOnUI    = false;
     m_touchStatus    = TouchStatus.None;
     m_longPressTimer = 0;
 }
Пример #29
0
        internal void HandleTouch(TouchEff sender, TouchStatus status)
        {
            if (sender.IsDisabled)
            {
                return;
            }

            var canExecuteAction = sender.CanExecute;

            if (status != TouchStatus.Started || canExecuteAction)
            {
                if (!canExecuteAction)
                {
                    status = TouchStatus.Canceled;
                }

                var state = status == TouchStatus.Started
                  ? TouchState.Pressed
                  : TouchState.Regular;

                if (status == TouchStatus.Started)
                {
                    _animationProgress = 0;
                    _animationState    = state;
                }

                var isToggled = sender.IsToggled;
                if (isToggled.HasValue)
                {
                    if (status != TouchStatus.Started)
                    {
                        _durationMultiplier = (_animationState == TouchState.Pressed && !isToggled.Value) ||
                                              (_animationState == TouchState.Regular && isToggled.Value)
                            ? 1 - _animationProgress
                            : _animationProgress;

                        sender.Status = status;
                        sender.RaiseStatusChanged();
                        if (status == TouchStatus.Canceled)
                        {
                            sender.ForceUpdateState(false);
                            return;
                        }
                        OnTapped(sender);
                        sender.IsToggled = !isToggled;
                        return;
                    }
                    state = isToggled.Value
                        ? TouchState.Regular
                        : TouchState.Pressed;

                    if (status == TouchStatus.Canceled)
                    {
                        state = state == TouchState.Pressed
                            ? TouchState.Regular
                            : TouchState.Pressed;
                    }
                }

                if (sender.State != state || status != TouchStatus.Canceled)
                {
                    sender.State = state;
                    sender.RaiseStateChanged();
                }
                sender.Status = status;
                sender.RaiseStatusChanged();
            }

            if (status == TouchStatus.Completed)
            {
                OnTapped(sender);
            }
        }
Пример #30
0
 public void OnPointerDown(PointerEventData eventData)
 {
     m_status   = TouchStatus.Press;
     PressedPos = eventData.position;
 }
Пример #31
0
 private void Init()
 {
     m_status     = TouchStatus.NoTouch;
     m_pressTimer = 0;
     m_isPressed  = false;
 }