把以下代码加入到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