private void Init() { _stopwatch = new Stopwatch(); _totalElapsedMillis = 0L; lock (_particleLock) { _particles ??= new List <ParticleBase>(); } _fallingParticlesPerSecond = FallingParticlesPerSecond; _particleRequester = new RateBasedParticleRequester(); TouchParticleGenerator = new SimpleParticleGenerator(); FallingParticleGenerator = new FallingParticleGenerator(); // Debug info _showDebugInfo = ShowDebugInfo; _debugInfoPaint.Color = DebugInfoColor.ToSKColor(); // SKCanvasView is not fast enough on Android, so let's use an SKGLView 😄 // Since there isn't a common interface for both SKCanvasView and SKGLView we're using a bit of indirection if (UseSKGLView) { var skglView = new SKGLView(); _getCanvasSize = () => skglView.CanvasSize; _invalidateSurface = () => skglView.InvalidateSurface(); _getEnableTouchEvents = () => skglView.EnableTouchEvents; _setEnableTouchEvents = enableTouchEvents => skglView.EnableTouchEvents = enableTouchEvents; _addTouchHandler = touchHandler => skglView.Touch += touchHandler; _removeTouchHandler = touchHandler => skglView.Touch -= touchHandler; skglView.PaintSurface += SkglViewOnPaintSurface; Content = skglView; } else { var skCanvasView = new SKCanvasView(); _getCanvasSize = () => skCanvasView.CanvasSize; _invalidateSurface = () => skCanvasView.InvalidateSurface(); _getEnableTouchEvents = () => skCanvasView.EnableTouchEvents; _setEnableTouchEvents = enableTouchEvents => skCanvasView.EnableTouchEvents = enableTouchEvents; _addTouchHandler = touchHandler => skCanvasView.Touch += touchHandler; _removeTouchHandler = touchHandler => skCanvasView.Touch -= touchHandler; skCanvasView.PaintSurface += OnPaintSurface; Content = skCanvasView; } }
protected override void OnPropertyChanged(string propertyName = null) { base.OnPropertyChanged(propertyName); if (propertyName == IsActiveProperty.PropertyName) { if (IsActive) { EnableTouchInput(); if (IsRunning) { StartMainAnimation(); } } else { DisableTouchInput(); StopMainAnimation(); IsRunning = false; } } else if (propertyName == AddParticlesOnTapProperty.PropertyName || propertyName == AddParticlesOnDragProperty.PropertyName) { if (AddParticlesOnTap || AddParticlesOnDrag) { EnableTouchInput(); } else { DisableTouchInput(); } } else if (propertyName == IsRunningProperty.PropertyName && IsActive) { if (IsRunning) { StartMainAnimation(); } else { PauseMainAnimation(); } } else if (propertyName == UseSKGLViewProperty.PropertyName) { Init(); } else if (propertyName == ShowDebugInfoProperty.PropertyName) { _showDebugInfo = ShowDebugInfo; } else if (propertyName == DebugInfoColorProperty.PropertyName) { _debugInfoPaint.Color = DebugInfoColor.ToSKColor(); } else if (propertyName == FallingParticlesPerSecondProperty.PropertyName) { _fallingParticlesPerSecond = FallingParticlesPerSecond; } }