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

posted @ 2024-06-24 17:38  zongzw  阅读(824)  评论(0)    收藏  举报