golang Gio UI开发
使用gio可以开发跨平台的基于golang的app UI
gio官网:https://gioui.org/doc/
个人感觉这个文档写的不好,没有阐述以下重要概念及其关系。
- 为什么Architecture 页面没有描述以下对象或类型的关系?
- 为什么要简写op.Ops?
- 为什么没有阐述window.Event()的种类及作用。
对象集合:
- app.Window
- op.Ops
- layout.Context
- clip.[Stack|Rect|RRect|...]
- paint.[ColorOp|PaintOp]
代码示例
演示跳动的时间:
package main
import (
"log"
"time"
"gioui.org/app"
"gioui.org/layout"
"gioui.org/op"
"gioui.org/widget/material"
)
func main() {
window := new(app.Window)
var op op.Ops
go func() {
theme := material.NewTheme()
window.Option(app.Title("Animation"))
for {
switch ev := window.Event().(type) {
case app.ConfigEvent:
case app.DestroyEvent:
log.Fatal(ev.Err)
case app.FrameEvent:
t := time.Now().Format("2006-01-02 15:04:05")
gtx := app.NewContext(&op, ev)
tt := material.Body1(theme, t)
layout.Center.Layout(gtx, tt.Layout)
ev.Frame(gtx.Ops)
}
}
}()
go func() {
for range time.Tick(time.Second) {
window.Invalidate()
}
}()
app.Main()
}
另外,做了一个简单的屏保:
代码地址:
https://github.com/zongzw-learn/learn-go/tree/master/3rd-libs/gioui