Exemplo n.º 1
0
        public PlaylistDetailView()
        {
            TitleLabel            = NSLabel.CreateWithFont(TitleFontName, TitleFontSize);
            TitleLabel.Identifier = "TitleLabel";
            TitleLabel.TextColor  = NSColor.FromRgb(51, 51, 51);

            DescriptionLabel            = NSLabel.CreateWithFont(DescriptionFontName, DescriptionFontSize);
            DescriptionLabel.Identifier = "DescriptionLabel";
            DescriptionLabel.TextColor  = NSColor.FromRgb(142, 142, 142);

            SongsTable = new SongsListView();

            outerStack = new NSStackView();
            outerStack.TranslatesAutoresizingMaskIntoConstraints = false;
            outerStack.Orientation  = NSUserInterfaceLayoutOrientation.Vertical;
            outerStack.Distribution = NSStackViewDistribution.Fill;
            outerStack.Spacing      = 10;
            outerStack.EdgeInsets   = new NSEdgeInsets(20, 0, 0, 0);

            outerStack.AddArrangedSubview(TitleLabel);
            outerStack.AddArrangedSubview(DescriptionLabel);
            outerStack.AddArrangedSubview(SongsTable);

            AddSubview(outerStack);

            AddConstraint(MinimumHeight(SongsTable, 100));
            AddConstraints(FillHorizontal(true, TitleLabel, DescriptionLabel));
            AddConstraints(FillHorizontal(outerStack, false));
            AddConstraints(FillVertical(outerStack, false));
        }
Exemplo n.º 2
0
        public ChatPage()
        {
            InitializeComponent();

            BindingContext = new ChatViewModel();

            MessagingCenter.Subscribe <object, object>(this, "ScollList", (sender, args) =>
            {
                SongsListView.ScrollTo(args, ScrollToPosition.End, true);
            });
        }
        private void SongsListViewJumpToActiveSong()
        {
            var activeSong = PlayerViewModel.ActiveSong;

            if (activeSong == null)
            {
                return;
            }

            SongsListView.ScrollIntoView(activeSong, ScrollIntoViewAlignment.Leading);
        }
Exemplo n.º 4
0
        private void SetupAnimations()
        {
            const float maxOffset = -16f;

            var scrollViewer    = SongsListView.FindDescendant <ScrollViewer>();
            var scrollerPropSet = ElementCompositionPreview.GetScrollViewerManipulationPropertySet(scrollViewer);

            var coverVisual             = CoverGrid.GetVisual();
            var coverPanelVisual        = CoverPanel.GetVisual();
            var titlePanelVisual        = TitlePanel.GetVisual();
            var contrastTitleTextVisual = ContrastTitleTextBlock.GetVisual();
            var accentTitleTextVisual   = AccentTitleTextBlock.GetVisual();
            var subtitleTextVisual      = SubtitleTextBlock.GetVisual();

            var c = this.GetVisual().Compositor;
            var coverPanelCoordinateY = c.CreateExpressionAnimation("Clamp(scroller.Translation.Y * factor, -16, 0)");

            coverPanelCoordinateY.SetReferenceParameter("scroller", scrollerPropSet);
            coverPanelCoordinateY.SetScalarParameter("factor", 0.2f);
            coverPanelVisual.StartAnimation("Offset.Y", coverPanelCoordinateY);

            var scaleAlgorithm = "Clamp(1 - layer.Offset.Y / maxOffset, 0.4, 1)";
            var scaleAnim      = c.CreateExpressionAnimation(scaleAlgorithm);

            scaleAnim.SetReferenceParameter("layer", coverPanelVisual);
            scaleAnim.SetScalarParameter("maxOffset", maxOffset);
            coverVisual.StartAnimation("Scale.X", scaleAnim);
            coverVisual.StartAnimation("Scale.Y", scaleAnim);

            var titlePanelCoordinateXAnim = c.CreateExpressionAnimation("coverOriginWidth * (layer.Scale.X - 1.0)");

            titlePanelCoordinateXAnim.SetReferenceParameter("layer", coverVisual);
            titlePanelCoordinateXAnim.SetScalarParameter("coverOriginWidth", 76f);
            titlePanelVisual.StartAnimation("Offset.X", titlePanelCoordinateXAnim);

            var titlePanelCoordinateYAnim = c.CreateExpressionAnimation("layer.Offset.Y * 1.5");

            titlePanelCoordinateYAnim.SetReferenceParameter("layer", coverPanelVisual);
            titlePanelVisual.StartAnimation("Offset.Y", titlePanelCoordinateYAnim);

            //var titleTextColorAnim = c.CreateExpressionAnimation("layer.Offset.Y < maxOffset / 2 ? whiteColor : accentColor");
            //titleTextColorAnim.SetReferenceParameter("layer", coverPanelVisual);
            //titleTextColorAnim.SetScalarParameter("maxOffset", maxOffset);
            //titleTextColorAnim.SetColorParameter("whiteColor", Colors.White);
            //titleTextColorAnim.SetColorParameter("accentColor", ((SolidColorBrush)TitleTextBlock.Foreground).Color);

            var accentTitleOpacityAnim = c.CreateExpressionAnimation("1 - layer.Offset.Y / maxOffset");

            accentTitleOpacityAnim.SetReferenceParameter("layer", coverPanelVisual);
            accentTitleOpacityAnim.SetScalarParameter("maxOffset", maxOffset);
            accentTitleTextVisual.StartAnimation("Opacity", accentTitleOpacityAnim);

            var contrastTitleOpcityAnim = c.CreateExpressionAnimation("layer.Offset.Y / maxOffset");

            contrastTitleOpcityAnim.SetReferenceParameter("layer", coverPanelVisual);
            contrastTitleOpcityAnim.SetScalarParameter("maxOffset", maxOffset);
            contrastTitleTextVisual.StartAnimation("Opacity", contrastTitleOpcityAnim);

            var subtitleTextOpacityAnim = c.CreateExpressionAnimation("1 - layer.Offset.Y / maxOffset");

            subtitleTextOpacityAnim.SetReferenceParameter("layer", coverPanelVisual);
            subtitleTextOpacityAnim.SetScalarParameter("maxOffset", maxOffset);
            subtitleTextVisual.StartAnimation("Opacity", subtitleTextOpacityAnim);
        }