示例#1
0
        private ValueAnimator CreateTransitionAnimator(long d, bool inz)
        {
            //((Activity)getContext()).getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            //        WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

            //chartView.enabled = false;
            //zoomedChartView.enabled = false;
            chartView.transitionMode       = BaseChartView.TRANSITION_MODE_PARENT;
            zoomedChartView.transitionMode = BaseChartView.TRANSITION_MODE_CHILD;

            var param = new TransitionParams();

            param.pickerEndOut   = chartView.pickerDelegate.pickerEnd;
            param.pickerStartOut = chartView.pickerDelegate.pickerStart;

            param.date = d;

            int dateIndex = Array.BinarySearch(data.chartData.x, d);

            if (dateIndex < 0)
            {
                dateIndex = data.chartData.x.Length - 1;
            }
            param.xPercentage = data.chartData.xPercentage[dateIndex];


            zoomedChartView.Visibility       = Visibility.Visible;
            zoomedChartView.transitionParams = param;
            chartView.transitionParams       = param;

            int max = 0;
            int min = int.MaxValue;

            for (int i = 0; i < data.chartData.lines.Count; i++)
            {
                if (data.chartData.lines[i].y[dateIndex] > max)
                {
                    max = data.chartData.lines[i].y[dateIndex];
                }

                if (data.chartData.lines[i].y[dateIndex] < min)
                {
                    min = data.chartData.lines[i].y[dateIndex];
                }
            }
            float pYPercentage = ((float)min + (max - min) - chartView.currentMinHeight) / (chartView.currentMaxHeight - chartView.currentMinHeight);


            var hidden = chartView.Visibility == Visibility.Collapsed;

            chartView.FillTransitionParams(param);
            zoomedChartView.FillTransitionParams(param);
            ValueAnimator animator = ValueAnimator.OfFloat(inz ? 0f : 1f, inz ? 1f : 0f);

            animator.AddUpdateListener(new AnimatorUpdateListener(animation =>
            {
                float fullWidth = chartView.chartWidth / (chartView.pickerDelegate.pickerEnd - chartView.pickerDelegate.pickerStart);
                float offset    = fullWidth * chartView.pickerDelegate.pickerStart - BaseChartView.HORIZONTAL_PADDING;

                param.pY = (float)chartView.chartArea.Top + (1f - pYPercentage) * (float)chartView.chartArea.Height;
                param.pX = chartView.chartFullWidth * param.xPercentage - offset;

                param.progress = (float)animation.GetAnimatedValue();
                zoomedChartView.Invalidate();
                zoomedChartView.FillTransitionParams(param);
                chartView.Invalidate();

                if (hidden)
                {
                    _ = chartView.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        chartView.Visibility = Visibility.Visible;
                    });
                }
            }));

            animator.SetDuration(400);
            animator.setInterpolator(new FastOutSlowInInterpolator());

            return(animator);
        }