Corona中文站

强大、易学的跨平台(iOS/Android)开发框架。QQ群1:74390406(满) 群2:221929599

导航

扩展corona的ui.lua功能,实现radio单选按钮功能代码

把以下代码加入到corona提供的ui.lua文件中即可。

注意: 1)代码中依赖ui.lua中提供的其他函数,所以必须得加在文件的尾部。

function newRadio( params )

local fontsize = params.fontsize or 12

local fontcolor = params.color or {255,255,255,255}

local t = display.newGroup()

t.value = 0

local btnOff, btnOn, lblText = nil, nil, nil

local function setStateValue( v, flag)

if v == 1 then

t.state = 1

btnOn.isVisible = true

btnOff.isVisible = false

else

t.state = 0

btnOn.isVisible = false

btnOff.isVisible = true

end

--是否調用回調函數

if flag == true then

if params.listener then 

local p = {}

p.target = t

params.listener(p) 

end

end

end

btnOff = display.newImage(params.offImage)

btnOn = display.newImage(params.onImage)

btnOn.isVisible = false

lblText = newLabel{

bounds={0, 0, 200, 18},

text="",

font=native.systemFontBold,

size=fontsize,

textColor = fontcolor,

align="left"

}

lblText:setText(params.text)

t:insert(btnOn)

t:insert(btnOff)

t:insert(lblText)

btnOn:setReferencePoint(display.TopLeftReferencePoint)

btnOn.x = 0

btnOn.y = 0

btnOff:setReferencePoint(display.TopLeftReferencePoint)

btnOff.x = 0

btnOff.y = 0

lblText:setReferencePoint(display.TopLeftReferencePoint)

lblText.x = btnOn.width

lblText.y = (btnOn.height - lblText.height) / 2

local function onGroupTouch(event)

local phase = event.phase

if "ended" == phase then

if t.state == 1 then

setStateValue(0, true)

else

setStateValue(1, true)

end

end

end

t:addEventListener("touch", onGroupTouch)

function t:setState( v )

setStateValue(v, false)

end

return t

end

使用示例:

--選項

local rs = {} 保存单选,组

local function onChanged( event )

local target = event.target

if target.state == 1 then

for i = 1, #rs do

if i ~= target.index then

rs[i]:setState(0)

end

end

end

end

 

local t = gameWorld.fudai_info

for i = 1, #t do

local r1 = ui.newRadio{

onImage="Images/common/13-2.png",

offImage="Images/common/13-1.png",

text = "选项" .. i,

fontsize = 12,

color = {255,0,0,255},

listener = onChanged,

}

r1.index = i

localGroup:insert(r1)

r1:setReferencePoint(display.TopLeftReferencePoint)

r1.x = 20

r1.y = 140 + (i-1) * 26

rs[#rs+1] = r1

end

--默认设置第一个为选中状态

if #rs > 0 then rs[1]:setState(1) end

<< 五分钟学会Corona(三十三) - 物理引擎corona简介-跨平台的手机App开发框架 >>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 Copyright 2011-2015 BuildApp.Net. All Rights Reserved.