You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms Android:SKCanvasView与其他视图同页不显示问题求助

解决Xamarin.Forms中SKCanvasView与其他视图不显示的问题

我来帮你搞定这个问题!你遇到的页面空白情况,大概率是SKCanvasView的尺寸约束缺失或者绘制逻辑没到位导致的,咱们一步步来排查修复:

1. 给SKCanvasView设置明确的尺寸

默认情况下,SKCanvasView如果没有内容或者明确的尺寸约束,会被布局容器压缩到0×0的大小,自然就看不到了。你可以在XAML里给它加上固定尺寸,甚至加个背景色方便确认视图是否存在:

<skia:SKCanvasView x:Name="canvas" 
                   PaintSurface="Canvas_Paint_Surface"
                   HeightRequest="300"
                   WidthRequest="300"
                   BackgroundColor="#f0f0f0"/> <!-- 浅灰色背景,直观看到视图范围 -->

2. 完善PaintSurface事件的绘制逻辑

如果你的Canvas_Paint_Surface方法里没有任何绘制操作,画布会是透明的,就算视图存在也可能看起来像没显示。至少要清空画布并绘制一些基础内容,比如:

private void Canvas_Paint_Surface(object sender, SKPaintSurfaceEventArgs e)
{
    var canvas = e.Surface.Canvas;
    // 先把画布清空为白色,避免默认透明导致看不到
    canvas.Clear(SKColors.White);

    // 绘制一个蓝色矩形做测试
    using var bluePaint = new SKPaint
    {
        Color = SKColors.Blue,
        Style = SKPaintStyle.Fill
    };
    canvas.DrawRect(new SKRect(50, 50, 250, 250), bluePaint);
}

3. 尝试换用Grid布局(可选)

如果StackLayout的布局计算还是有问题,可以试试用Grid来控制布局,它的尺寸约束更明确:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:skia="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms" 
             x:Class="AndroidExample.Principal" 
             Title="myApp">
  <Grid Padding="10">
    <Grid.RowDefinitions>
        <RowDefinition Height="300"/> <!-- 给画布固定高度 -->
        <RowDefinition Height="Auto"/> <!-- Label自动适应高度 -->
    </Grid.RowDefinitions>
    
    <skia:SKCanvasView Grid.Row="0" 
                       x:Name="canvas" 
                       PaintSurface="Canvas_Paint_Surface"
                       BackgroundColor="#f0f0f0"/>
    <Label Grid.Row="1" 
           Text="EXAMPLE" 
           FontSize="Large" 
           FontAttributes="Bold"
           Margin="0,20,0,0"/>
  </Grid>
</ContentPage>

4. 确认NuGet包安装正确

最后检查一下,你的项目是否已经正确安装了SkiaSharp.Views.Forms NuGet包,并且所有平台项目(尤其是Android)都引用了这个包。

按照上面的步骤调整后,应该就能看到SKCanvasView和Label正常显示啦!

内容的提问来源于stack exchange,提问作者E. Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:30:07