mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-13 13:38:16 +08:00
Initial commit
This commit is contained in:
143
app/fyne_demo/tutorials/animation.go
Normal file
143
app/fyne_demo/tutorials/animation.go
Normal file
@@ -0,0 +1,143 @@
|
||||
package tutorials
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
"time"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/canvas"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
)
|
||||
|
||||
func makeAnimationScreen(_ fyne.Window) fyne.CanvasObject {
|
||||
curves := makeAnimationCurves()
|
||||
curves.Move(fyne.NewPos(0, 140+theme.Padding()))
|
||||
return fyne.NewContainerWithoutLayout(makeAnimationCanvas(), curves)
|
||||
}
|
||||
|
||||
func makeAnimationCanvas() fyne.CanvasObject {
|
||||
rect := canvas.NewRectangle(color.Black)
|
||||
rect.Resize(fyne.NewSize(410, 140))
|
||||
|
||||
a := canvas.NewColorRGBAAnimation(theme.PrimaryColorNamed(theme.ColorBlue), theme.PrimaryColorNamed(theme.ColorGreen),
|
||||
time.Second*3, func(c color.Color) {
|
||||
rect.FillColor = c
|
||||
canvas.Refresh(rect)
|
||||
})
|
||||
a.RepeatCount = fyne.AnimationRepeatForever
|
||||
a.AutoReverse = true
|
||||
a.Start()
|
||||
|
||||
var a2 *fyne.Animation
|
||||
i := widget.NewIcon(theme.CheckButtonCheckedIcon())
|
||||
a2 = canvas.NewPositionAnimation(fyne.NewPos(0, 0), fyne.NewPos(350, 80), time.Second*3, func(p fyne.Position) {
|
||||
i.Move(p)
|
||||
|
||||
width := 10 + (p.X / 7)
|
||||
i.Resize(fyne.NewSize(width, width))
|
||||
})
|
||||
a2.RepeatCount = fyne.AnimationRepeatForever
|
||||
a2.AutoReverse = true
|
||||
a2.Curve = fyne.AnimationLinear
|
||||
a2.Start()
|
||||
|
||||
running := true
|
||||
var toggle *widget.Button
|
||||
toggle = widget.NewButton("Stop", func() {
|
||||
if running {
|
||||
a.Stop()
|
||||
a2.Stop()
|
||||
toggle.SetText("Start")
|
||||
} else {
|
||||
a.Start()
|
||||
a2.Start()
|
||||
toggle.SetText("Stop")
|
||||
}
|
||||
running = !running
|
||||
})
|
||||
toggle.Resize(toggle.MinSize())
|
||||
toggle.Move(fyne.NewPos(152, 54))
|
||||
return fyne.NewContainerWithoutLayout(rect, i, toggle)
|
||||
}
|
||||
|
||||
func makeAnimationCurves() fyne.CanvasObject {
|
||||
label1, box1, a1 := makeAnimationCurveItem("EaseInOut", fyne.AnimationEaseInOut, 0)
|
||||
label2, box2, a2 := makeAnimationCurveItem("EaseIn", fyne.AnimationEaseIn, 30+theme.Padding())
|
||||
label3, box3, a3 := makeAnimationCurveItem("EaseOut", fyne.AnimationEaseOut, 60+theme.Padding()*2)
|
||||
label4, box4, a4 := makeAnimationCurveItem("Linear", fyne.AnimationLinear, 90+theme.Padding()*3)
|
||||
|
||||
start := widget.NewButton("Compare", func() {
|
||||
a1.Start()
|
||||
a2.Start()
|
||||
a3.Start()
|
||||
a4.Start()
|
||||
})
|
||||
start.Resize(start.MinSize())
|
||||
start.Move(fyne.NewPos(0, 120+theme.Padding()*4))
|
||||
return fyne.NewContainerWithoutLayout(label1, label2, label3, label4, box1, box2, box3, box4, start)
|
||||
}
|
||||
|
||||
func makeAnimationCurveItem(label string, curve fyne.AnimationCurve, yOff float32) (
|
||||
text *widget.Label, box fyne.CanvasObject, anim *fyne.Animation) {
|
||||
text = widget.NewLabel(label)
|
||||
text.Alignment = fyne.TextAlignCenter
|
||||
text.Resize(fyne.NewSize(380, 30))
|
||||
text.Move(fyne.NewPos(0, yOff))
|
||||
box = newThemedBox()
|
||||
box.Resize(fyne.NewSize(30, 30))
|
||||
box.Move(fyne.NewPos(0, yOff))
|
||||
|
||||
anim = canvas.NewPositionAnimation(
|
||||
fyne.NewPos(0, yOff), fyne.NewPos(380, yOff), time.Second, func(p fyne.Position) {
|
||||
box.Move(p)
|
||||
box.Refresh()
|
||||
})
|
||||
anim.Curve = curve
|
||||
anim.AutoReverse = true
|
||||
anim.RepeatCount = 1
|
||||
return
|
||||
}
|
||||
|
||||
// themedBox is a simple box that change its background color according
|
||||
// to the selected theme
|
||||
type themedBox struct {
|
||||
widget.BaseWidget
|
||||
}
|
||||
|
||||
func newThemedBox() *themedBox {
|
||||
b := &themedBox{}
|
||||
b.ExtendBaseWidget(b)
|
||||
return b
|
||||
}
|
||||
|
||||
func (b *themedBox) CreateRenderer() fyne.WidgetRenderer {
|
||||
b.ExtendBaseWidget(b)
|
||||
bg := canvas.NewRectangle(theme.ForegroundColor())
|
||||
return &themedBoxRenderer{bg: bg, objects: []fyne.CanvasObject{bg}}
|
||||
}
|
||||
|
||||
type themedBoxRenderer struct {
|
||||
bg *canvas.Rectangle
|
||||
objects []fyne.CanvasObject
|
||||
}
|
||||
|
||||
func (r *themedBoxRenderer) Destroy() {
|
||||
}
|
||||
|
||||
func (r *themedBoxRenderer) Layout(size fyne.Size) {
|
||||
r.bg.Resize(size)
|
||||
}
|
||||
|
||||
func (r *themedBoxRenderer) MinSize() fyne.Size {
|
||||
return r.bg.MinSize()
|
||||
}
|
||||
|
||||
func (r *themedBoxRenderer) Objects() []fyne.CanvasObject {
|
||||
return r.objects
|
||||
}
|
||||
|
||||
func (r *themedBoxRenderer) Refresh() {
|
||||
r.bg.FillColor = theme.ForegroundColor()
|
||||
r.bg.Refresh()
|
||||
}
|
||||
Reference in New Issue
Block a user