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

前端 未结 1 1100
陌清茗
陌清茗 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

    
    
    
        
            
            
                
                    
                
    
                
    
            
        
    
    
    

    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)
提交回复
热议问题