------------------------------------------------ --作者: 王圣 --日期: 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