diff --git a/CHANGELOG.md b/CHANGELOG.md index 18c98036..c48c095f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # 更新日志 +* (2020.01.09) 修复当设置`DataZoom`的`minShowNum`时可能异常的问题 * (2020.01.08) 修复当设置`AxisLine`的`onZero`时刻度显示异常的问题 * (2020.01.08) 增加`Mask`遮罩遮挡支持 * (2019.12.21) 增加`Tooltip`的单个数据项和标题的字符串模版格式器 diff --git a/Runtime/Component/Main/Axis.cs b/Runtime/Component/Main/Axis.cs index 6c5fe660..185996f8 100644 --- a/Runtime/Component/Main/Axis.cs +++ b/Runtime/Component/Main/Axis.cs @@ -390,6 +390,7 @@ namespace XCharts { var startIndex = (int)((data.Count - 1) * dataZoom.start / 100); var endIndex = (int)((data.Count - 1) * dataZoom.end / 100); + if (endIndex < startIndex) endIndex = startIndex; if (startIndex != filterStart || endIndex != filterEnd || dataZoom.minShowNum != filterMinShow || m_NeedUpdateFilterData) { filterStart = startIndex; @@ -399,9 +400,17 @@ namespace XCharts if (m_Data.Count > 0) { var count = endIndex == startIndex ? 1 : endIndex - startIndex + 1; - if (count < dataZoom.minShowNum) count = dataZoom.minShowNum; - if (startIndex + count > m_Data.Count - 1) count = m_Data.Count - 1 - startIndex; - filterData = m_Data.GetRange(startIndex, count); + if (count < dataZoom.minShowNum) + { + if (dataZoom.minShowNum > m_Data.Count) count = m_Data.Count; + else count = dataZoom.minShowNum; + } + if (startIndex + count > m_Data.Count) + { + int start = endIndex - count; + filterData = m_Data.GetRange(start < 0 ? 0 : start, count); + } + else filterData = m_Data.GetRange(startIndex, count); } else { diff --git a/Runtime/Component/Main/Serie.cs b/Runtime/Component/Main/Serie.cs index 7aed7b28..d8f0a48f 100644 --- a/Runtime/Component/Main/Serie.cs +++ b/Runtime/Component/Main/Serie.cs @@ -966,6 +966,8 @@ namespace XCharts { var startIndex = (int)((data.Count - 1) * dataZoom.start / 100); var endIndex = (int)((data.Count - 1) * dataZoom.end / 100); + if (endIndex < startIndex) endIndex = startIndex; + if (startIndex != m_FilterStart || endIndex != m_FilterEnd || dataZoom.minShowNum != m_FilterMinShow || m_NeedUpdateFilterData) { m_FilterStart = startIndex; @@ -973,11 +975,19 @@ namespace XCharts m_FilterMinShow = dataZoom.minShowNum; m_NeedUpdateFilterData = false; var count = endIndex == startIndex ? 1 : endIndex - startIndex + 1; - if (count < dataZoom.minShowNum) count = dataZoom.minShowNum; + if (count < dataZoom.minShowNum) + { + if (dataZoom.minShowNum > m_Data.Count) count = m_Data.Count; + else count = dataZoom.minShowNum; + } if (m_Data.Count > 0) { - if (startIndex + count > m_Data.Count - 1) count = m_Data.Count - 1 - startIndex; - m_FilterData = m_Data.GetRange(startIndex, count); + if (startIndex + count > m_Data.Count) + { + int start = endIndex - count; + m_FilterData = m_Data.GetRange(start < 0 ? 0 : start, count); + } + else m_FilterData = m_Data.GetRange(startIndex, count); } else {