绘制一个交通标志
- 首先实现一个函数makeSign(),该函数返回fyne.CanvasObject对象,对象中实现所有的图形
func makeSign() fyne.CanvasObject {
bg := canvas.NewCircle(color.NRGBA{R: 255, A: 255})
bg.StrokeColor = color.White
bg.StrokeWidth = 5
bar := canvas.NewRectangle(color.White)
// canvas 工具里面的对象都可以使用
c := container.NewWithoutLayout(bg, bar)
bg.Resize(fyne.NewSize(100, 100))
bg.Move(fyne.NewPos(10, 10))
bar.Resize(fyne.NewSize(80, 20))
bar.Move(fyne.NewPos(20, 50))
return c
}
- 创建使用canvas.NewCircle(color.NRGBA{R: 255, A: 255})创建背景
- 通过StrokeWidth设置圆边的宽度
bg.StrokeColor = color.White
bg.StrokeWidth = 5
- 在中心绘制一个白色的矩形
bar := canvas.NewRectangle(color.White)
- 为了组合两个图形,我们需要定义一个容器,将会按照容器中传入的顺序绘制图形
c := container.NewWithoutLayout(bg, bar)
- 摆放图形
// 大小100x100 放到10x10的位置,刚好是120x120的中心
bg.Resize(fyne.NewSize(100, 100))
bg.Move(fyne.NewPos(10, 10))
// 矩形也是刚好摆放到图形的中心
bar.Resize(fyne.NewSize(80, 20))
bar.Move(fyne.NewPos(20, 50))
效果
调用上述图形的主函数
func main() {
a := app.New()
w := a.NewWindow("Sign")
w.SetContent(makeSign())
w.SetPadded(false)
w.Resize(fyne.NewSize(120, 120))
w.ShowAndRun()
}
代码完整实现:
package main
import (
"image/color"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
)
func main() {
a := app.New()
w := a.NewWindow("Sign")
w.SetContent(makeSign())
w.SetPadded(false)
w.Resize(fyne.NewSize(120, 120))
w.ShowAndRun()
}
func makeSign() fyne.CanvasObject {
bg := canvas.NewCircle(color.NRGBA{R: 255, A: 255})
bg.StrokeColor = color.White
bg.StrokeWidth = 5
bar := canvas.NewRectangle(color.White)
c := container.NewWithoutLayout(bg, bar)
// 设置背景圆形 大小和位置
bg.Resize(fyne.NewSize(100, 100))
bg.Move(fyne.NewPos(10, 10))
// 设置白色矩形的大小和位置
bar.Resize(fyne.NewSize(80, 20))
bar.Move(fyne.NewPos(20, 50))
return c
}
关注公众号持续学习go语言的各种知识点