c# - Xamarin Android 中的可切换保存按钮
问题描述
我创建了一个布局,其中列出了RecyclerView
. 我想为用户添加保存某个对象的选项,但我不知道如何实现类似下面的布局。我需要一个可以切换的按钮,如果用户单击它,它将用红色填充心形按钮,否则它将为空。谢谢你。
布局
解决方案
如果您希望使用某种动画从无到有充实,我建议您查看 SkiaSharp ( https://blog.xamarin.com/deep-dive-skiasharp-xamarin-forms/ ),然后使用动画类 ( https://xamarinhelp.com/custom-animations-in-xamarin-forms/ ) 为填充高度设置动画。
简而言之,您必须创建一个自定义视图,在其中添加一个 SKCanvasView:
<skia:SKCanvasView x:Name="PrimaryCanvas" PaintSurface="OnPaintSurface" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"/>
在 view.xaml.cs 中添加一个新函数
OnPaintSurface(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs e) { ... }
在这个函数内部,你需要编写一些代码来绘制你的心。我建议你先画一个轮廓,然后再画一个应该填满的内部。您可能想要添加一个可绑定属性,该属性保存要填充的金额的值,可能是百分比。使用此属性计算 OnPaintSurface 代码中内部零件的高度。
最后,当您希望图标填满时,您创建一个动画,然后更改之前创建的属性:
new Animation((value) =>
{
FillHeightProperty = value;
PrimaryCanvas.InvalidateSurface();
}).Commit(this, "fillAnimation", length: 350, repeat: () => false);
请注意,您需要使 PrimaryCanvas 表面无效。这将导致再次调用 OnPaintSurface,这将使用您更改的属性,因此在重绘画布时增加填充的高度。
推荐阅读
- cypher - Cypher - 重复合并节点直到没有节点
- python - 在 GNS3 中的 Ubuntu Docker 容器上安装 Python3、PIP、Paramiko
- reactjs - 在 Storybook 中使用 Material-UI 组件产生奇怪的代码片段
- c++ - 如何从 DirectX 文件中获取投影坐标,例如 XY?
- r - str_replace_all 不适用于包含括号的字符串
- spring-boot - 使用 Vault Agent Sidecar 配置 Spring Vault
- regex - 正则表达式 - 匹配来自任何语言的所有字符和所有正时字符,除了
- java - JavaFX - 单击按钮时尝试弹出一个屏幕
- r - 如何在 r-markdown pdf 中将数据框类别描述为部分和内容?
- google-apps-script - 无法将 JSON 数据的值设置为分隔单元格