优化清空并重新添加数据后的自动刷新问题

This commit is contained in:
monitor1394
2020-03-11 08:41:42 +08:00
parent cb86799e44
commit 4606d65a5c
7 changed files with 29 additions and 8 deletions

View File

@@ -1,6 +1,7 @@
# 更新日志 # 更新日志
* (2020.03.11) 优化清空并重新添加数据后的自动刷新问题
* (2020.03.10) 增加`LineChart`的普通折线图可通过`ignore`参数设置忽略数据的支持 * (2020.03.10) 增加`LineChart`的普通折线图可通过`ignore`参数设置忽略数据的支持
* (2020.03.09) 增加`BarChart`可通过`ItemStyle`配置边框的支持 * (2020.03.09) 增加`BarChart`可通过`ItemStyle`配置边框的支持
* (2020.03.08) 增加`RingChart`环形图 * (2020.03.08) 增加`RingChart`环形图

View File

@@ -92,7 +92,9 @@ namespace XCharts
{ {
m_Series.ClearData(); m_Series.ClearData();
m_Legend.ClearData(); m_Legend.ClearData();
m_Tooltip.ClearValue();
m_CheckAnimation = false; m_CheckAnimation = false;
m_ReinitLabel = true;
RefreshChart(); RefreshChart();
} }
@@ -105,7 +107,9 @@ namespace XCharts
{ {
m_Legend.ClearData(); m_Legend.ClearData();
m_Series.RemoveAll(); m_Series.RemoveAll();
m_Tooltip.ClearValue();
m_CheckAnimation = false; m_CheckAnimation = false;
m_ReinitLabel = true;
RefreshChart(); RefreshChart();
} }

View File

@@ -830,6 +830,7 @@ namespace XCharts
if (m_RuntimeMinValue == 0 && m_RuntimeMaxValue == 0) return 0; if (m_RuntimeMinValue == 0 && m_RuntimeMaxValue == 0) return 0;
if (!m_RuntimeMinValueChanged) return m_RuntimeMinValue; if (!m_RuntimeMinValueChanged) return m_RuntimeMinValue;
var time = Time.time - m_RuntimeMinValueUpdateTime; var time = Time.time - m_RuntimeMinValueUpdateTime;
if (time == 0) return m_RuntimeMinValue;
var total = duration / 1000; var total = duration / 1000;
if (duration > 0 && time <= total) if (duration > 0 && time <= total)
{ {
@@ -849,8 +850,9 @@ namespace XCharts
if (m_RuntimeMinValue == 0 && m_RuntimeMaxValue == 0) return 0; if (m_RuntimeMinValue == 0 && m_RuntimeMaxValue == 0) return 0;
if (!m_RuntimeMaxValueChanged) return m_RuntimeMaxValue; if (!m_RuntimeMaxValueChanged) return m_RuntimeMaxValue;
var time = Time.time - m_RuntimeMaxValueUpdateTime; var time = Time.time - m_RuntimeMaxValueUpdateTime;
if (time == 0) return m_RuntimeMaxValue;
var total = duration / 1000; var total = duration / 1000;
if (duration > 0 && time <= total) if (duration > 0 && time < total)
{ {
var curr = Mathf.Lerp(m_RuntimeLastMaxValue, m_RuntimeMaxValue, time / total); var curr = Mathf.Lerp(m_RuntimeLastMaxValue, m_RuntimeMaxValue, time / total);
return curr; return curr;

View File

@@ -1561,6 +1561,15 @@ namespace XCharts
return m_Ignore && Mathf.Approximately(value, m_IgnoreValue); return m_Ignore && Mathf.Approximately(value, m_IgnoreValue);
} }
public bool IsIngorePoint(int index)
{
if (index >= 0 && index < dataPoints.Count)
{
return ChartHelper.IsIngore(dataPoints[index]);
}
return false;
}
/// <summary> /// <summary>
/// 更新运行时中心点和半径 /// 更新运行时中心点和半径
/// </summary> /// </summary>

View File

@@ -125,7 +125,7 @@ namespace XCharts
/// </summary> /// </summary>
public void ClearData() public void ClearData()
{ {
AnimationPause(); AnimationFadeIn();
foreach (var serie in m_Series) foreach (var serie in m_Series)
{ {
serie.ClearData(); serie.ClearData();
@@ -326,7 +326,7 @@ namespace XCharts
/// </summary> /// </summary>
public void RemoveAll() public void RemoveAll()
{ {
AnimationPause(); AnimationFadeIn();
m_Series.Clear(); m_Series.Clear();
} }

View File

@@ -421,7 +421,7 @@ namespace XCharts
string key = serie.name; string key = serie.name;
float xValue, yValue; float xValue, yValue;
serie.GetXYData(index, m_DataZoom, out xValue, out yValue); serie.GetXYData(index, m_DataZoom, out xValue, out yValue);
var isIngore = ChartHelper.IsIngore(serie.dataPoints[index]); var isIngore = serie.IsIngorePoint(index);
if (isCartesian) if (isCartesian)
{ {
var serieData = serie.GetSerieData(index, m_DataZoom); var serieData = serie.GetSerieData(index, m_DataZoom);
@@ -1521,7 +1521,7 @@ namespace XCharts
{ {
content = serie.label.GetFormatterContent(serie.name, serieData.name, value, total); content = serie.label.GetFormatterContent(serie.name, serieData.name, value, total);
} }
serieData.SetLabelActive(value != 0); serieData.SetLabelActive(value != 0 && serieData.labelPosition != Vector3.zero);
serieData.SetLabelPosition(serie.label.offset); serieData.SetLabelPosition(serie.label.offset);
if (serieData.SetLabelText(content)) RefreshChart(); if (serieData.SetLabelText(content)) RefreshChart();
} }

View File

@@ -14,6 +14,7 @@ namespace XCharts
internal static class SerieLabelPool internal static class SerieLabelPool
{ {
private static readonly Stack<GameObject> m_Stack = new Stack<GameObject>(200); private static readonly Stack<GameObject> m_Stack = new Stack<GameObject>(200);
private static Dictionary<int, bool> m_ReleaseDic = new Dictionary<int, bool>(1000);
public static GameObject Get(string name, Transform parent, SerieLabel label, Font font, Color color, public static GameObject Get(string name, Transform parent, SerieLabel label, Font font, Color color,
float iconWidth, float iconHeight) float iconWidth, float iconHeight)
@@ -29,6 +30,7 @@ namespace XCharts
else else
{ {
element = m_Stack.Pop(); element = m_Stack.Pop();
m_ReleaseDic.Remove(element.GetInstanceID());
element.name = name; element.name = name;
element.transform.SetParent(parent); element.transform.SetParent(parent);
element.transform.localEulerAngles = new Vector3(0, 0, label.rotate); element.transform.localEulerAngles = new Vector3(0, 0, label.rotate);
@@ -45,10 +47,12 @@ namespace XCharts
public static void Release(GameObject element) public static void Release(GameObject element)
{ {
ChartHelper.SetActive(element, false); ChartHelper.SetActive(element, false);
//if (m_Stack.Count > 0 && ReferenceEquals(m_Stack.Peek(), element)) if (!Application.isPlaying) return;
// Debug.LogError("Internal error. Trying to destroy object that is already released to pool." + element.name); if (!m_ReleaseDic.ContainsKey(element.GetInstanceID()))
if (Application.isPlaying) {
m_Stack.Push(element); m_Stack.Push(element);
m_ReleaseDic.Add(element.GetInstanceID(), true);
}
} }
public static void ReleaseAll(Transform parent) public static void ReleaseAll(Transform parent)
@@ -63,6 +67,7 @@ namespace XCharts
public static void ClearAll() public static void ClearAll()
{ {
m_Stack.Clear(); m_Stack.Clear();
m_ReleaseDic.Clear();
} }
} }
} }