219 lines
8.6 KiB
TypeScript
219 lines
8.6 KiB
TypeScript
import { Group, Panel, text, gravity, Gravity, Color, LayoutSpec, vlayout, slider, slideItem, image, layoutConfig, ScaleType, switchView, hlayout, modal, input, stack, InputType } from "doric";
|
|
import { colors } from "./utils";
|
|
|
|
const imageUrls = [
|
|
'http://b.hiphotos.baidu.com/image/pic/item/908fa0ec08fa513db777cf78376d55fbb3fbd9b3.jpg',
|
|
'http://f.hiphotos.baidu.com/image/pic/item/0e2442a7d933c8956c0e8eeadb1373f08202002a.jpg',
|
|
'http://f.hiphotos.baidu.com/image/pic/item/b151f8198618367aa7f3cc7424738bd4b31ce525.jpg',
|
|
'http://b.hiphotos.baidu.com/image/pic/item/0eb30f2442a7d9337119f7dba74bd11372f001e0.jpg',
|
|
'http://a.hiphotos.baidu.com/image/h%3D300/sign=b38f3fc35b0fd9f9bf175369152cd42b/9a504fc2d5628535bdaac29e9aef76c6a6ef63c2.jpg',
|
|
'http://h.hiphotos.baidu.com/image/pic/item/810a19d8bc3eb1354c94a704ac1ea8d3fd1f4439.jpg',
|
|
'http://calonye.com/wp-content/uploads/2015/08/0-wx_fmtgiftpwebpwxfrom5wx_lazy1-9.gif',
|
|
'http://hbimg.b0.upaiyun.com/ca29ea125b7f2d580f573e48eb594b1ef509757f34a08-m0hK45_fw658',
|
|
'https://misc.aotu.io/ONE-SUNDAY/SteamEngine.png',
|
|
'http://b.hiphotos.baidu.com/image/pic/item/908fa0ec08fa513db777cf78376d55fbb3fbd9b3.jpg',
|
|
'http://f.hiphotos.baidu.com/image/pic/item/0e2442a7d933c8956c0e8eeadb1373f08202002a.jpg',
|
|
'http://f.hiphotos.baidu.com/image/pic/item/b151f8198618367aa7f3cc7424738bd4b31ce525.jpg',
|
|
'http://b.hiphotos.baidu.com/image/pic/item/0eb30f2442a7d9337119f7dba74bd11372f001e0.jpg',
|
|
'http://a.hiphotos.baidu.com/image/h%3D300/sign=b38f3fc35b0fd9f9bf175369152cd42b/9a504fc2d5628535bdaac29e9aef76c6a6ef63c2.jpg',
|
|
'http://h.hiphotos.baidu.com/image/pic/item/810a19d8bc3eb1354c94a704ac1ea8d3fd1f4439.jpg',
|
|
'http://calonye.com/wp-content/uploads/2015/08/0-wx_fmtgiftpwebpwxfrom5wx_lazy1-9.gif',
|
|
]
|
|
@Entry
|
|
class SliderPanel extends Panel {
|
|
build(rootView: Group): void {
|
|
let pager = slider({
|
|
itemCount: imageUrls.length,
|
|
renderPage: (idx) => {
|
|
return slideItem(image({
|
|
imageUrl: imageUrls[idx % imageUrls.length],
|
|
scaleType: ScaleType.ScaleAspectFit,
|
|
layoutConfig: layoutConfig().configWidth(LayoutSpec.MOST).configHeight(LayoutSpec.MOST).configAlignment(gravity().center()),
|
|
})).also(it => {
|
|
let start = idx
|
|
it.onClick = () => {
|
|
it.backgroundColor = (colors[++start % colors.length])
|
|
}
|
|
})
|
|
},
|
|
loop: true,
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.MOST,
|
|
heightSpec: LayoutSpec.MOST,
|
|
weight: 1,
|
|
},
|
|
onPageSlided: (index) => {
|
|
modal(context).toast(index.toString())
|
|
}
|
|
})
|
|
|
|
let pageIndexInput = input({
|
|
backgroundColor: Color.WHITE,
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.FIT,
|
|
heightSpec: LayoutSpec.FIT,
|
|
},
|
|
hintText: "Page index",
|
|
inputType: InputType.Number,
|
|
textAlignment: Gravity.Center,
|
|
border: {
|
|
width: 1,
|
|
color: Color.GRAY,
|
|
},
|
|
})
|
|
|
|
rootView.addChild(vlayout([
|
|
text({
|
|
text: "Gallery",
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.MOST,
|
|
heightSpec: LayoutSpec.JUST,
|
|
},
|
|
textSize: 30,
|
|
textColor: Color.WHITE,
|
|
backgroundColor: colors[1],
|
|
textAlignment: gravity().center(),
|
|
height: 50,
|
|
}),
|
|
hlayout([
|
|
text({
|
|
text: "Loop",
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.FIT,
|
|
heightSpec: LayoutSpec.JUST,
|
|
},
|
|
textSize: 20,
|
|
textColor: Color.BLACK,
|
|
textAlignment: gravity().center(),
|
|
height: 50,
|
|
}),
|
|
switchView({
|
|
state: true,
|
|
onSwitch: (state) => {
|
|
pager.loop = state
|
|
},
|
|
}),
|
|
], {
|
|
layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT),
|
|
gravity: gravity().center(),
|
|
space: 10,
|
|
backgroundColor: Color.RED,
|
|
}),
|
|
hlayout([
|
|
text({
|
|
text: "Scrollable",
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.FIT,
|
|
heightSpec: LayoutSpec.JUST,
|
|
},
|
|
textSize: 20,
|
|
textColor: Color.BLACK,
|
|
textAlignment: gravity().center(),
|
|
height: 50,
|
|
}),
|
|
switchView({
|
|
state: true,
|
|
onSwitch: (state) => {
|
|
pager.scrollable = state
|
|
},
|
|
}),
|
|
], {
|
|
layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT),
|
|
gravity: gravity().center(),
|
|
space: 10,
|
|
backgroundColor: Color.RED,
|
|
}),
|
|
hlayout([
|
|
text({
|
|
text: "Bounces",
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.FIT,
|
|
heightSpec: LayoutSpec.JUST,
|
|
},
|
|
textSize: 20,
|
|
textColor: Color.BLACK,
|
|
textAlignment: gravity().center(),
|
|
height: 50,
|
|
}),
|
|
switchView({
|
|
state: true,
|
|
onSwitch: (state) => {
|
|
pager.bounces = state
|
|
},
|
|
}),
|
|
], {
|
|
layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT),
|
|
gravity: gravity().center(),
|
|
space: 10,
|
|
backgroundColor: Color.RED,
|
|
}),
|
|
hlayout([
|
|
text({
|
|
text: "Slide to page",
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.FIT,
|
|
heightSpec: LayoutSpec.JUST,
|
|
},
|
|
textSize: 20,
|
|
textColor: Color.BLACK,
|
|
textAlignment: gravity().center(),
|
|
height: 50,
|
|
}),
|
|
pageIndexInput,
|
|
text({
|
|
text: "Go!",
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.FIT,
|
|
heightSpec: LayoutSpec.JUST,
|
|
},
|
|
padding: {
|
|
left: 10,
|
|
right: 10
|
|
},
|
|
textSize: 20,
|
|
textColor: Color.BLACK,
|
|
backgroundColor: Color.WHITE,
|
|
textAlignment: gravity().center(),
|
|
height: 40,
|
|
onClick: async () => {
|
|
let index = await pageIndexInput.getText(context);
|
|
await pager.slidePage(context, parseInt(index), true)
|
|
}
|
|
}),
|
|
], {
|
|
layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT),
|
|
gravity: gravity().center(),
|
|
space: 10,
|
|
backgroundColor: Color.RED,
|
|
}),
|
|
hlayout([
|
|
text({
|
|
text: "getSlidedPage",
|
|
layoutConfig: {
|
|
widthSpec: LayoutSpec.FIT,
|
|
heightSpec: LayoutSpec.JUST,
|
|
},
|
|
textSize: 20,
|
|
textColor: Color.BLACK,
|
|
textAlignment: gravity().center(),
|
|
height: 50,
|
|
onClick: async () => {
|
|
let index = await pager.getSlidedPage(context);
|
|
modal(context).toast(index.toString())
|
|
}
|
|
}),
|
|
], {
|
|
layoutConfig: layoutConfig().most().configHeight(LayoutSpec.FIT),
|
|
gravity: gravity().center(),
|
|
space: 10,
|
|
backgroundColor: Color.RED,
|
|
}),
|
|
pager,
|
|
]).also(it => {
|
|
it.layoutConfig = {
|
|
widthSpec: LayoutSpec.MOST,
|
|
heightSpec: LayoutSpec.MOST,
|
|
}
|
|
}))
|
|
}
|
|
} |