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
相关产品推荐
相关产品推荐

