如何在 Xamarin Forms 中实现 instagram 故事?

How to implement instagram stories in Xamarin Forms?

如何使用 C# 在 Xamarin 表单中实现 Instagram 故事?

我找到了这个:

https://github.com/shts/StoriesProgressView

但它与 Java 一起使用,并且仅适用于 Android

在您的情况下,您可以使用 CarouselView 来显示图像集合。 它提供了一个可滚动的布局,用户可以在其中滑动以在项目集合中移动。

它目前处于实验阶段,只能通过将以下代码行添加到 iOS 上的 AppDelegate class 或 MainActivity class 在 Android 上调用 Forms.Init:

Forms.SetFlags("CarouselView_Experimental");

在xaml

<StackLayout  VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
        <CarouselView x:Name="carousel" IsSwipeEnabled="False" Position="{Binding Index}" ItemsSource="{Binding MySource}">
            <CarouselView.ItemsLayout>
                <LinearItemsLayout Orientation="Horizontal" />
            </CarouselView.ItemsLayout>
            <CarouselView.ItemTemplate>
                <DataTemplate>
                    <StackLayout  VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">

                        // I set BackgroundColor here just for demo and you need to set the Source of the Image
                        <Image BackgroundColor="{Binding .}" WidthRequest="400" HeightRequest="500" Aspect="AspectFit"  />

                    </StackLayout>
                </DataTemplate>
            </CarouselView.ItemTemplate>
        </CarouselView>
    </StackLayout>

在视图模型中

public MainViewModel()
        {
            MySource = new ObservableCollection<Color>() {Color.LightBlue,Color.Red,Color.Yellow };

            Device.StartTimer(TimeSpan.FromSeconds(5),()=> {


                if(index<MySource.Count-1)
                {
                    Index++;
                }
                else
                {
                    Index = 0;
                }

                return true;
            
            });

        }
       

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }