微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与SkiaSharp的Carouselview

如何解决与SkiaSharp的Carouselview

我正在尝试将模板设置为包含SkiaSharp的轮播视图。我无法在skia:SKCanvasView上设置Source,所以我创建了模板视图,但是现在将轮播视图绑定到ImageResults时什么也没显示,但是我不知道如何将模板添加到列表中?

public List<Resultlist> ImageResults = new List<Resultlist>();
      public  class Resultlist
        {
            public string Desc { get; set; }
    
            public string Value { get; set; }
    
            public  SKBitmap foto { get; set; }
        }
<CarouselView Margin="0,0" HorizontalScrollBarVisibility="Never"  Style="{StaticResource ImageResultCarousel}" 
                ItemsSource="{Binding ImageResults,Mode=TwoWay}" 
                 BackgroundColor="{DynamicResource PictureBackground}"
                                   >
                            <CarouselView.ItemTemplate >
                                <DataTemplate>
                                    <resultlist:template></resultlist:template>
                                </DataTemplate>
                            </CarouselView.ItemTemplate>
</CarouselView>

模板

<yummy:PancakeView  CornerRadius="80">
            <skia:SKCanvasView  x:Name="canvasView" HeightRequest="400"  WidthRequest="200"
        PaintSurface="OnCanvasViewPaintSurface" />
     </yummy:PancakeView >

模板的背面

SKBitmap bitmap =
    BitmapExtensions.LoadBitmapResource(typeof(template),"Resultlist.Screenshot.png");

    private void OnCanvasViewPaintSurface(object sender,SKPaintSurfaceEventArgs args)
    {
        SKImageInfo info = args.Info;
        SKSurface surface = args.Surface;
        SKCanvas canvas = surface.Canvas;

        canvas.Clear();

        SKRect dest = new SKRect(0,info.Width,info.Height);

        BitmapStretch stretch = (BitmapStretch)BitmapStretch.AspectFill;
        BitmapAlignment horizontal = (BitmapAlignment)BitmapAlignment.Center;
        BitmapAlignment vertical = (BitmapAlignment)BitmapAlignment.Center;

        canvas.DrawBitmap(bitmap,dest,stretch,horizontal,vertical);
    }

解决方法

我们可以在DataTemplate中创建内联“视图”。

<CarouselView Margin="0,0" HorizontalScrollBarVisibility="Never"  Style="{StaticResource ImageResultCarousel}" 
                ItemsSource="{Binding ImageResults,Mode=TwoWay}" 
                 BackgroundColor="{DynamicResource PictureBackground}"
                                   >
                            <CarouselView.ItemTemplate >
                                <DataTemplate>
                                    <yummy:PancakeView  CornerRadius="80">
            <skia:SKCanvasView  x:Name="canvasView" HeightRequest="400"  WidthRequest="200"
        PaintSurface="OnCanvasViewPaintSurface" />
     </yummy:PancakeView >
                                </DataTemplate>
                            </CarouselView.ItemTemplate>
</CarouselView>

以及后面的代码

private void OnCanvasViewPaintSurface(object sender,SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs e)
        {
            var canvasView = sender as SKCanvasView;
            var resultList = canvasView.BindingContext as Resultlist;
            //Now we can use resultList.foto to draw canvas.
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。