125 lines
3.7 KiB
Lua
125 lines
3.7 KiB
Lua
|
------------------------------------------------
|
||
|
--作者: 王圣
|
||
|
--日期: 2020-12-29
|
||
|
--文件: DynamicProcessSlider.lua
|
||
|
--模块: DynamicProcessSlider
|
||
|
--描述: 动态进度条组件
|
||
|
------------------------------------------------
|
||
|
|
||
|
local DynamicProcessSlider = {
|
||
|
Trans = nil, -- Transform
|
||
|
Bg = nil,
|
||
|
Spr = nil,
|
||
|
Slider = nil,
|
||
|
|
||
|
HeadValue = 0,
|
||
|
Space = 0,
|
||
|
BgAndSprDis = 0,
|
||
|
SpaceCount = 0,
|
||
|
Derection = DynamicProcessDir.Width,
|
||
|
DataList = List:New()
|
||
|
}
|
||
|
|
||
|
--headValue : 进度条头部长(宽) 有些进度条头部并不是等比划分
|
||
|
--space : 进度条等比间隔
|
||
|
--bgAndSprDis Bg和Spr之间的间隔
|
||
|
function DynamicProcessSlider:New(trans, headValue, space, bgAndSprDis, derection)
|
||
|
local _m = Utils.DeepCopy(self)
|
||
|
_m.Trans = trans
|
||
|
_m.HeadValue = headValue
|
||
|
_m.Space = space
|
||
|
_m.BgAndSprDis = bgAndSprDis
|
||
|
_m.Derection = derection
|
||
|
if headValue == 0 or headValue == nil then
|
||
|
self.HeadValue = space
|
||
|
end
|
||
|
_m:FindAllComponents()
|
||
|
return _m
|
||
|
end
|
||
|
|
||
|
--查找组件
|
||
|
function DynamicProcessSlider:FindAllComponents()
|
||
|
local _myTrans = self.Trans
|
||
|
self.Bg = UIUtils.FindSpr(_myTrans,"Bg")
|
||
|
self.Spr = UIUtils.FindSpr(_myTrans, "Spr")
|
||
|
self.Slider = UIUtils.FindSlider(_myTrans, "Spr")
|
||
|
end
|
||
|
|
||
|
function DynamicProcessSlider:Init(spaceCount)
|
||
|
|
||
|
--设置Bg 和 Spr 的长(宽)
|
||
|
|
||
|
|
||
|
end
|
||
|
|
||
|
function DynamicProcessSlider:GetSprWidthOrHeight()
|
||
|
local _value = self.HeadValue + (self.SpaceCount - 1) * self.Space + self.BgAndSprDis
|
||
|
_value = _value - 2 * self.BgAndSprDis
|
||
|
return _value
|
||
|
end
|
||
|
|
||
|
function DynamicProcessSlider:GetBgWidthOrHeight()
|
||
|
local _value = self.HeadValue + (self.SpaceCount - 1) * self.Space + self.BgAndSprDis
|
||
|
return _value
|
||
|
end
|
||
|
|
||
|
--刷新进度
|
||
|
function DynamicProcessSlider:Refreash(point, dataList, spaceCount)
|
||
|
if #self.DataList then
|
||
|
if dataList ~= nil then
|
||
|
for i = 1, #dataList do
|
||
|
self.DataList:Add(dataList[i])
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if self.SpaceCount == 0 then
|
||
|
self.SpaceCount = spaceCount
|
||
|
if self.Derection == DynamicProcessDir.Width then
|
||
|
self.Bg.width = math.floor( self:GetBgWidthOrHeight() )
|
||
|
self.Spr.width = math.floor( self:GetSprWidthOrHeight() )
|
||
|
else
|
||
|
self.Bg.height = math.floor( self:GetBgWidthOrHeight() )
|
||
|
self.Spr.height = math.floor( self:GetSprWidthOrHeight() )
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local _isFind = false
|
||
|
local _curData = nil
|
||
|
local _frontData = nil
|
||
|
for i = 1, #self.DataList do
|
||
|
local _data = self.DataList[i]
|
||
|
if _data ~= nil then
|
||
|
if _data.Point >= point and not _isFind then
|
||
|
_curData = _data
|
||
|
_isFind = true
|
||
|
break
|
||
|
else
|
||
|
_frontData = _data
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if not _isFind then
|
||
|
--进度已经满了
|
||
|
self.Slider.value = 1
|
||
|
else
|
||
|
local _frontPoint = 0
|
||
|
local _frontIndex = 1
|
||
|
if _frontData ~= nil then
|
||
|
_frontPoint = _frontData.Point
|
||
|
_frontIndex = _frontData.Index
|
||
|
end
|
||
|
local _value1 = (point - _frontPoint) / (_curData.Point - _frontPoint) --point / _curData.Point
|
||
|
local _frontWidth = (self.HeadValue + self.Space * (_frontIndex - 1) - self.BgAndSprDis)
|
||
|
local _width = 0
|
||
|
if _frontPoint == 0 then
|
||
|
_width = _value1 * self.HeadValue
|
||
|
else
|
||
|
_width = _value1 * self.Space + _frontWidth
|
||
|
end
|
||
|
--local _value2 = (self.HeadValue + self.Space * (_curData.Index - 1) - self.BgAndSprDis) / self:GetSprWidthOrHeight()
|
||
|
self.Slider.value = _width / self:GetSprWidthOrHeight()--_value1 * _value2
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return DynamicProcessSlider
|