------------------------------------------------ --作者: 王圣 --日期: 2020-12-29 --文件: DynamicProcess.lua --模块: DynamicProcess --描述: 动态进度条组件 ------------------------------------------------ local DynamicProcess = { Trans = nil, -- Transform Bg = nil, Spr = nil, HeadValue = 0, Space = 0, BgAndSprDis = 0, SpaceCount = 0, Derection = DynamicProcessDir.Width, DataList = List:New() } --headValue : 进度条头部长(宽) 有些进度条头部并不是等比划分 --space : 进度条等比间隔 --bgAndSprDis Bg和Spr之间的间隔 function DynamicProcess: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 DynamicProcess:FindAllComponents() local _myTrans = self.Trans self.Bg = UIUtils.FindSpr(_myTrans,"Bg") self.Spr = UIUtils.FindSpr(_myTrans, "Spr") end function DynamicProcess:Init(spaceCount) --设置Bg 和 Spr 的长(宽) end function DynamicProcess:GetSprWidthOrHeight() local _value = self.HeadValue + (self.SpaceCount - 1) * self.Space + self.BgAndSprDis _value = _value - 2 * self.BgAndSprDis return _value end function DynamicProcess:GetBgWidthOrHeight() local _value = self.HeadValue + (self.SpaceCount - 1) * self.Space + self.BgAndSprDis return _value end --刷新进度 function DynamicProcess: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 = self:GetBgWidthOrHeight() self.Spr.width = self:GetSprWidthOrHeight() else self.Bg.height = self:GetBgWidthOrHeight() self.Spr.height = self:GetSprWidthOrHeight() end end local _isFind = false local _curData = 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 end end end if not _isFind then --进度已经满了 self.Spr.fillAmount = 1 else local _value1 = point / _curData.Point local _value2 = (self.HeadValue + self.Space * (_curData.Index - 1) - self.BgAndSprDis) / self:GetSprWidthOrHeight() self.Spr.fillAmount = _value1 * _value2 end end return DynamicProcess