diff --git a/Scripts/UI/Component/Serie.cs b/Scripts/UI/Component/Serie.cs index 44a2957b..9e03359f 100644 --- a/Scripts/UI/Component/Serie.cs +++ b/Scripts/UI/Component/Serie.cs @@ -639,6 +639,19 @@ namespace XCharts } } + public void UpdateDataName(int index, string name) + { + if (index >= 0 && index < m_Data.Count) + { + var serieData = m_Data[index]; + serieData.name = name; + if (serieData.label != null) + { + serieData.label.text = name == null ? "" : name; + } + } + } + /// /// 清除所有数据的高亮标志 /// diff --git a/Scripts/UI/Component/Series.cs b/Scripts/UI/Component/Series.cs index 76ebd9ba..1e345b73 100644 --- a/Scripts/UI/Component/Series.cs +++ b/Scripts/UI/Component/Series.cs @@ -332,6 +332,24 @@ namespace XCharts } } + public void UpdateDataName(string serieName, string dataName, int dataIndex = 0) + { + var serie = GetSerie(serieName); + if (serie != null) + { + serie.UpdateDataName(dataIndex, dataName); + } + } + + public void UpdateDataName(int serieIndex, string dataName, int dataIndex = 0) + { + var serie = GetSerie(serieIndex); + if (serie != null) + { + serie.UpdateDataName(dataIndex, dataName); + } + } + /// /// 更新指定系列的维度Y数据 /// diff --git a/Scripts/UI/Internal/BaseChart.cs b/Scripts/UI/Internal/BaseChart.cs index 0c221e75..397a0024 100644 --- a/Scripts/UI/Internal/BaseChart.cs +++ b/Scripts/UI/Internal/BaseChart.cs @@ -52,6 +52,7 @@ namespace XCharts [NonSerialized] private List m_CheckSerieName = new List(); [NonSerialized] private bool m_RefreshChart = false; [NonSerialized] private bool m_RefreshLabel = false; + [NonSerialized] private bool m_ReinitLabel = false; protected Vector2 chartAnchorMax { get { return rectTransform.anchorMax; } } protected Vector2 chartAnchorMin { get { return rectTransform.anchorMin; } } @@ -199,7 +200,6 @@ namespace XCharts private void InitLegend() { m_Legend.OnChanged(); - ChartHelper.HideAllObject(transform, s_LegendObjectName); TextAnchor anchor = m_Legend.location.textAnchor; Vector2 anchorMin = m_Legend.location.anchorMin; Vector2 anchorMax = m_Legend.location.anchorMax; @@ -208,8 +208,8 @@ namespace XCharts var legendObject = ChartHelper.AddObject(s_LegendObjectName, transform, anchorMin, anchorMax, pivot, new Vector2(chartWidth, chartHeight)); legendObject.transform.localPosition = m_Legend.location.GetPosition(chartWidth, chartHeight); - ChartHelper.HideAllObject(legendObject, s_LegendObjectName); - + ChartHelper.DestoryAllChilds(legendObject.transform); + if (!m_Legend.show) return; var serieNameList = m_Series.GetSerieNameList(); List datas; if (m_Legend.data.Count > 0) @@ -287,9 +287,9 @@ namespace XCharts private void InitSerieLabel() { - ChartHelper.HideAllObject(transform, s_SerieLabelObjectName); var labelObject = ChartHelper.AddObject(s_SerieLabelObjectName, transform, chartAnchorMin, chartAnchorMax, chartPivot, new Vector2(chartWidth, chartHeight)); + ChartHelper.DestoryAllChilds(labelObject.transform); int count = 0; for (int i = 0; i < m_Series.Count; i++) { @@ -308,7 +308,7 @@ namespace XCharts m_ThemeInfo.font, color, TextAnchor.MiddleCenter, anchorMin, anchorMax, pivot, new Vector2(50, serie.label.fontSize), serie.label.fontSize); serieData.label.text = serieData.name; - serieData.label.gameObject.SetActive(true); + ChartHelper.SetActive(serieData.label.gameObject, false); } } } @@ -445,6 +445,11 @@ namespace XCharts protected void CheckRefreshLabel() { + if (m_ReinitLabel) + { + m_ReinitLabel = false; + InitSerieLabel(); + } if (m_RefreshLabel) { m_RefreshLabel = false; diff --git a/Scripts/UI/Internal/BaseChart_API.cs b/Scripts/UI/Internal/BaseChart_API.cs index 8caa86c6..b65fd2e2 100644 --- a/Scripts/UI/Internal/BaseChart_API.cs +++ b/Scripts/UI/Internal/BaseChart_API.cs @@ -168,7 +168,11 @@ namespace XCharts public virtual bool AddData(int serieIndex, float data, string dataName = null) { var success = m_Series.AddData(serieIndex, data, dataName, m_MaxCacheDataNumber); - if (success) RefreshChart(); + if (success) + { + RefreshChart(); + ReinitChartLabel(); + } return success; } @@ -183,7 +187,11 @@ namespace XCharts public virtual bool AddData(string serieName, List multidimensionalData, string dataName = null) { var success = m_Series.AddData(serieName, multidimensionalData, dataName, m_MaxCacheDataNumber); - if (success) RefreshChart(); + if (success) + { + RefreshChart(); + ReinitChartLabel(); + } return success; } @@ -198,7 +206,11 @@ namespace XCharts public virtual bool AddData(int serieIndex, List multidimensionalData, string dataName = null) { var success = m_Series.AddData(serieIndex, multidimensionalData, dataName, m_MaxCacheDataNumber); - if (success) RefreshChart(); + if (success) + { + RefreshChart(); + ReinitChartLabel(); + } return success; } @@ -214,7 +226,11 @@ namespace XCharts public virtual bool AddData(string serieName, float xValue, float yValue, string dataName) { var success = m_Series.AddXYData(serieName, xValue, yValue, dataName, m_MaxCacheDataNumber); - if (success) RefreshChart(); + if (success) + { + RefreshChart(); + ReinitChartLabel(); + } return true; } @@ -230,7 +246,11 @@ namespace XCharts public virtual bool AddData(int serieIndex, float xValue, float yValue, string dataName = null) { var success = m_Series.AddXYData(serieIndex, xValue, yValue, dataName, m_MaxCacheDataNumber); - if (success) RefreshChart(); + if (success) + { + RefreshChart(); + ReinitChartLabel(); + } return success; } @@ -260,6 +280,30 @@ namespace XCharts RefreshChart(); } + /// + /// Update serie data name. + /// 更新指定系列中的指定索引数据名称。 + /// + /// + /// + /// + public virtual void UpdateDataName(string serieName, string dataName, int dataIndex = 0) + { + m_Series.UpdateDataName(serieName, dataName, dataIndex); + } + + /// + /// Update serie data name. + /// 更新指定系列中的指定索引数据名称。 + /// + /// + /// + /// + public virtual void UpdateDataName(int serieIndex, string dataName, int dataIndex) + { + m_Series.UpdateDataName(serieIndex, dataName, dataIndex); + } + /// /// Whether to show serie. /// 设置指定系列是否显示。 @@ -352,6 +396,14 @@ namespace XCharts m_RefreshChart = true; } + /// + /// 重新初始化Label。 + /// + public void ReinitChartLabel() + { + m_ReinitLabel = true; + } + /// /// Update chart theme. /// 切换图表主题。 diff --git a/Scripts/UI/PieChart.cs b/Scripts/UI/PieChart.cs index 85565f41..985e650c 100644 --- a/Scripts/UI/PieChart.cs +++ b/Scripts/UI/PieChart.cs @@ -341,6 +341,7 @@ namespace XCharts var isHighlight = (serieData.highlighted && serie.highlightLabel.show); if (serie.label.show || isHighlight) { + ChartHelper.SetActive(serieData.label.gameObject,true); float rotate = 0; bool isInsidePosition = serie.label.position == SerieLabel.Position.Inside; if (serie.label.rotate > 0 && isInsidePosition)