Is it possible to drag to down panel slider using xamarin forms?

前端 未结 1 1076
陌清茗
陌清茗 2021-01-17 06:32

I\'m new in xamamrin forms anyone helps me about drag to down panel slider. I want to drag to down slider in android using xamarin forms mentioned in image

Any hav

相关标签:
1条回答
  • 2021-01-17 07:22

    There are many way to implement a sliding panel, I provide one of them which using a PanGestureRecognizer :

    in xaml

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 xmlns:d="http://xamarin.com/schemas/2014/forms/design"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"         
                 mc:Ignorable="d"
                 x:Class="App10.MainPage">
    
        <AbsoluteLayout BackgroundColor="White" AbsoluteLayout.LayoutBounds="0,1,1,1">
            <!--  -->
            <StackLayout x:Name="bottomDrawer" BackgroundColor="Olive" AbsoluteLayout.LayoutBounds="0.5,0.00,0.9,0.04" AbsoluteLayout.LayoutFlags="All">
                <StackLayout.GestureRecognizers>
                    <PanGestureRecognizer PanUpdated="PanGestureHandler" />
                </StackLayout.GestureRecognizers>
    
                <!-- put the content of panel slider here -->
    
            </StackLayout>
        </AbsoluteLayout>
    
    </ContentPage>
    

    in code behind

    
    using System.ComponentModel;
    using System.Threading.Tasks;
    using Xamarin.Forms;
    
    namespace App10
    {
        // Learn more about making custom code visible in the Xamarin.Forms previewer
        // by visiting https://aka.ms/xamarinforms-previewer
        [DesignTimeVisible(false)]
        public partial class MainPage : ContentPage
        {
            public MainPage()
            {
                InitializeComponent();        
            }
    
            double? layoutHeight;
            double layoutBoundsHeight;
            int direction;
            const double layoutPropHeightMax = 0.75;
            const double layoutPropHeightMin = 0.04;
            void PanGestureHandler(object sender, PanUpdatedEventArgs e)
            {
                layoutHeight = layoutHeight ?? ((sender as StackLayout).Parent as AbsoluteLayout).Height;
                switch (e.StatusType)
                {
                    case GestureStatus.Started:
                        layoutBoundsHeight = AbsoluteLayout.GetLayoutBounds(sender as StackLayout).Height;
                        break;
                    case GestureStatus.Running:
                        direction = e.TotalY > 0 ? 1 : -1;
                        break;
                    case GestureStatus.Completed:
                        if (direction > 0) 
                        {
                            Device.BeginInvokeOnMainThread(async() =>
                            {
    
                                var height = layoutPropHeightMin;
    
                                while (height < layoutPropHeightMax)
                                {
                                   await Task.Delay(2);
                                    height += 0.04;
    
                                    AbsoluteLayout.SetLayoutBounds(bottomDrawer, new Rectangle(0.5, 0.00, 0.9, height));
                                }
    
                            });
                          
                        }
                        else
                        {
                            Device.BeginInvokeOnMainThread(async () =>
                            {
    
                                var height = layoutPropHeightMax;
    
                                while (height > layoutPropHeightMin)
                                {
                                    await Task.Delay(2);
                                    height -= 0.04;
    
                                    AbsoluteLayout.SetLayoutBounds(bottomDrawer, new Rectangle(0.5, 0.00, 0.9, height));
                                }
    
                            });
                        }
                        break;
                }
            }
        }
    }
    
    

    0 讨论(0)
提交回复
热议问题