async void OnStarted(object sender, EventArgs e)
        {
            TaskCompletionSource <bool> tcs = null;

            _startButton.IsEnabled = false;
            _listView.ScrollTo(_testData[0], ScrollToPosition.MakeVisible, false);
            await Task.Delay(100);

            var animator = DependencyService.Get <IEcoreAnimator>(DependencyFetchTarget.GlobalInstance);

            _started        = true;
            _frameCount     = 0;
            _animationCount = 0;
            object target = null;

            _stopWatch.Reset();
            _animationStopWatch.Reset();
            _listView.ItemAppearing += itemAppearing;
            animator.Animation      += OnAnimation;

            for (int i = 10; i < 300; i += 20)
            {
                tcs    = new TaskCompletionSource <bool>();
                target = _testData[i];
                _listView.ScrollTo(target, ScrollToPosition.MakeVisible, true);
                await tcs.Task;
            }

            _listView.ItemAppearing -= itemAppearing;
            animator.Animation      -= OnAnimation;

            _stopWatch.Stop();
            _animationStopWatch.Stop();

            if (_stopWatch.ElapsedMilliseconds > 0)
            {
                double fps    = (_frameCount * 1000.0) / _stopWatch.ElapsedMilliseconds;
                double aniFps = (_animationCount * 1000.0) / _animationStopWatch.ElapsedMilliseconds;
                _ = DisplayAlert("FPS", $"EvasFPS {fps:f2} fps \nAnimator FPS :  {aniFps:f2} fps", "OK");
            }

            _started = false;
            _startButton.IsEnabled = true;

            void itemAppearing(object s, ItemVisibilityEventArgs evt)
            {
                if (evt.Item == target)
                {
                    tcs.TrySetResult(true);
                }
            }
        }
示例#2
0
        private void OnCheckEnteringSpeed(object sender, EventArgs e)
        {
            _listView.RenderPost -= OnCheckEnteringSpeed;
            double currentTime = EcoreAnimator.CurrentTime;

            _enteringSpeed = (currentTime - _enteringSpeed) * 1000.0;
            Console.WriteLine($"OnCheckEnteringSpeed  currentTime:{currentTime}, _enteringSpeed:{_enteringSpeed}");

            _frameSet = GlobalScrollConfig.BringInScrollFriction;
            GlobalScrollConfig.BringInScrollFriction = TimeSet;
            Console.WriteLine($"OnCheckEnteringSpeed  _frameSet:{_frameSet}, TimeSet:{TimeSet}");
            _listView.ScrollTo(ItemTarget, ScrollToPosition.MakeVisible, true);
        }