public override void MouseDown(NSEvent mouseEvent) { if (effect?.IsDisabled ?? true) { return; } effect?.HandleUserInteraction(TouchInteractionStatus.Started); effect?.HandleTouch(TouchStatus.Started); base.MouseDown(mouseEvent); }
void OnTouchDown(AView.TouchEventArgs e) { IsCanceled = false; startX = e.Event.GetX(); startY = e.Event.GetY(); effect?.HandleUserInteraction(TouchInteractionStatus.Started); effect?.HandleTouch(TouchStatus.Started); StartRipple(e.Event.GetX(), e.Event.GetY()); if (effect.DisallowTouchThreshold > 0) { Group.Parent?.RequestDisallowInterceptTouchEvent(true); } }
void OnPointerEntered(object sender, PointerRoutedEventArgs e) { if (effect?.IsDisabled ?? true) { return; } effect?.HandleHover(HoverStatus.Entered); if (isPressed) { effect?.HandleTouch(TouchStatus.Started); AnimateTilt(pointerDownStoryboard); } }
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); } }
public async Task HandleTouch(TouchStatus status, TouchInteractionStatus?interactionStatus = null) { if (IsCanceled || effect == null) { return; } if (effect?.IsDisabled ?? true) { return; } var canExecuteAction = effect.CanExecute; if (interactionStatus == TouchInteractionStatus.Started) { effect?.HandleUserInteraction(TouchInteractionStatus.Started); interactionStatus = null; } effect?.HandleTouch(status); if (interactionStatus.HasValue) { effect?.HandleUserInteraction(interactionStatus.Value); } if (effect == null || (!effect.NativeAnimation && !IsButton) || (!canExecuteAction && status == TouchStatus.Started)) { return; } var control = effect.Element; if (control?.GetRenderer() is not UIView renderer) { 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 ??= renderer.Layer.ShadowOpacity; await 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(); } }); }