diff --git a/Documentation~/en/configuration.md b/Documentation~/en/configuration.md
index 05a1654e..daff3168 100644
--- a/Documentation~/en/configuration.md
+++ b/Documentation~/en/configuration.md
@@ -171,6 +171,7 @@ import APITable from '@site/src/components/APITable';
- [AnimationFadeIn](#animationfadein)
- [AnimationFadeOut](#animationfadeout)
- [AnimationInfo](#animationinfo)
+- [AnimationInteraction](#animationinteraction)
- [BaseSerie](#baseserie)
- [ChartText](#charttext)
- [ChildComponent](#childcomponent)
@@ -248,7 +249,7 @@ Fade out animation.
## AnimationInfo
-> XCharts.Runtime.AnimationInfo / Subclasses: [AnimationFadeIn](#animationfadein), [AnimationFadeOut](#animationfadeout), [AnimationChange](#animationchange), [AnimationAddition](#animationaddition)
+> XCharts.Runtime.AnimationInfo / Subclasses: [AnimationFadeIn](#animationfadein), [AnimationFadeOut](#animationfadeout), [AnimationChange](#animationchange), [AnimationAddition](#animationaddition), [AnimationInteraction](#animationinteraction)
> Since `v3.8.0`
@@ -270,6 +271,28 @@ the animation info.
```
+## AnimationInteraction
+
+> XCharts.Runtime.AnimationInteraction : [AnimationInfo](#animationinfo)
+
+> Since `v3.8.0`
+
+Interactive animation of charts.
+
+```mdx-code-block
+
+```
+
+
+|field|default|since|comment|
+|--|--|--|--|
+|widthRate|1.3f|v3.8.0|the size rate of the width.
+|radiusRate|1.3f|v3.8.0|the size rate of the radius.
+
+```mdx-code-block
+
+```
+
## AnimationStyle
> XCharts.Runtime.AnimationStyle : [ChildComponent](#childcomponent)
@@ -292,6 +315,7 @@ the animation of serie. support animation type: fadeIn, fadeOut, change, additio
|fadeOut||v3.8.0|Fade out animation configuration. [AnimationFadeOut](#animationfadeout)|
|change||v3.8.0|Update data animation configuration. [AnimationChange](#animationchange)|
|addition||v3.8.0|Add data animation configuration. [AnimationAddition](#animationaddition)|
+|interaction||v3.8.0|Interaction animation configuration. [AnimationInteraction](#animationinteraction)|
```mdx-code-block
@@ -1775,7 +1799,6 @@ A data item of serie.
|lineSymbolSize|||the symbol size of line serie.
|scatterSymbolSize|||the symbol size of scatter serie.
|pieTooltipExtraRadius|||the extra radius of pie when actived by tooltip.
-|selectedRate|1.3f||the rate of symbol size of line or scatter serie.
|pieSelectedOffset|||the center offset of pie if selected.
|candlestickColor|Color32(235, 84, 84, 255)||K线图阳线(涨)填充色
|candlestickColor0|Color32(71, 178, 98, 255)||K线图阴线(跌)填充色
diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md
index 529bd681..233adc7d 100644
--- a/Documentation~/zh/changelog.md
+++ b/Documentation~/zh/changelog.md
@@ -69,11 +69,13 @@ slug: /changelog
版本要点:
-* 新增数据动画
+* 重构和完善动画系统,增加新增动画和交互动画的配置支持
日志详情:
-* (2023.07.11) 重构`Animation`动画系统,增加`Addition`新增动画支持
+* (2023.07.14) 增加`Animation`的`Interaction`交互动画配置支持
+* (2023.07.11) 增加`Animation`的`Addition`新增动画配置支持
+* (2023.07.11) 重构`Animation`动画系统,完善动画体验
* (2023.06.30) 增加`PolarCood`的`indicatorLabelOffset`设置指示文本偏移的支持
* (2023.06.30) 修复`Axis`的`IndicatorLabel`的背景颜色可能不正常的问题
* (2023.06.30) 增加`Axis`的`IndicatorLabel`可自定义`color`的支持
diff --git a/Documentation~/zh/configuration.md b/Documentation~/zh/configuration.md
index 672afb26..8e5f3586 100644
--- a/Documentation~/zh/configuration.md
+++ b/Documentation~/zh/configuration.md
@@ -171,6 +171,7 @@ import APITable from '@site/src/components/APITable';
- [AnimationFadeIn](#animationfadein)
- [AnimationFadeOut](#animationfadeout)
- [AnimationInfo](#animationinfo)
+- [AnimationInteraction](#animationinteraction)
- [BaseSerie](#baseserie)
- [ChartText](#charttext)
- [ChildComponent](#childcomponent)
@@ -248,7 +249,7 @@ import APITable from '@site/src/components/APITable';
## AnimationInfo
-> XCharts.Runtime.AnimationInfo / Subclasses: [AnimationFadeIn](#animationfadein), [AnimationFadeOut](#animationfadeout), [AnimationChange](#animationchange), [AnimationAddition](#animationaddition)
+> XCharts.Runtime.AnimationInfo / Subclasses: [AnimationFadeIn](#animationfadein), [AnimationFadeOut](#animationfadeout), [AnimationChange](#animationchange), [AnimationAddition](#animationaddition), [AnimationInteraction](#animationinteraction)
> 从 `v3.8.0` 开始支持
@@ -270,11 +271,33 @@ import APITable from '@site/src/components/APITable';
```
+## AnimationInteraction
+
+> XCharts.Runtime.AnimationInteraction : [AnimationInfo](#animationinfo)
+
+> 从 `v3.8.0` 开始支持
+
+交互动画。
+
+```mdx-code-block
+
+```
+
+
+|field|default|since|comment|
+|--|--|--|--|
+|widthRate|1.3f|v3.8.0|宽度的放大倍率。
+|radiusRate|1.3f|v3.8.0|半径的放大倍率。
+
+```mdx-code-block
+
+```
+
## AnimationStyle
> XCharts.Runtime.AnimationStyle : [ChildComponent](#childcomponent)
-动画组件,用于控制图表的动画播放。支持配置四种动画表现:FadeIn(渐入动画),FadeOut(渐出动画),Change(变更动画),Addition(新增动画)。 按作用的对象可以分为两类:SerieAnimation(系列动画)和DataAnimation(数据动画)。
+动画组件,用于控制图表的动画播放。支持配置五种动画表现:FadeIn(渐入动画),FadeOut(渐出动画),Change(变更动画),Addition(新增动画),Interaction(交互动画)。 按作用的对象可以分为两类:SerieAnimation(系列动画)和DataAnimation(数据动画)。
```mdx-code-block
@@ -292,6 +315,7 @@ import APITable from '@site/src/components/APITable';
|fadeOut||v3.8.0|渐出动画配置。 [AnimationFadeOut](#animationfadeout)|
|change||v3.8.0|数据变更动画配置。 [AnimationChange](#animationchange)|
|addition||v3.8.0|数据新增动画配置。 [AnimationAddition](#animationaddition)|
+|interaction||v3.8.0|交互动画配置。 [AnimationInteraction](#animationinteraction)|
```mdx-code-block
@@ -1775,7 +1799,6 @@ Radar coordinate conponnet for radar charts. 雷达图坐标系组件,只适
|lineSymbolSize|||折线图的Symbol大小。
|scatterSymbolSize|||散点图的Symbol大小。
|pieTooltipExtraRadius|||饼图鼠标移到高亮时的额外半径
-|selectedRate|1.3f||折线图或散点图在被选中时的放大倍数。
|pieSelectedOffset|||饼图选中时的中心点偏移。
|candlestickColor|Color32(235, 84, 84, 255)||K线图阳线(涨)填充色
|candlestickColor0|Color32(71, 178, 98, 255)||K线图阴线(跌)填充色
diff --git a/Editor/ChildComponents/AnimationDrawer.cs b/Editor/ChildComponents/AnimationDrawer.cs
index 0bc20ca3..6188282d 100644
--- a/Editor/ChildComponents/AnimationDrawer.cs
+++ b/Editor/ChildComponents/AnimationDrawer.cs
@@ -50,6 +50,23 @@ namespace XCharts.Editor
}
}
+ [CustomPropertyDrawer(typeof(XCharts.Runtime.AnimationInteraction), true)]
+ public class AnimationInteractionDrawer : BasePropertyDrawer
+ {
+ public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label)
+ {
+ base.OnGUI(pos, prop, label);
+ if (MakeComponentFoldout(prop, "m_Enable", true))
+ {
+ ++EditorGUI.indentLevel;
+ PropertyField(prop, "m_Duration");
+ PropertyField(prop, "m_WidthRate");
+ PropertyField(prop, "m_RadiusRate");
+ --EditorGUI.indentLevel;
+ }
+ }
+ }
+
[CustomPropertyDrawer(typeof(AnimationStyle), true)]
public class AnimationDrawer : BasePropertyDrawer
{
@@ -66,6 +83,7 @@ namespace XCharts.Editor
PropertyField(prop, "m_FadeOut");
PropertyField(prop, "m_Change");
PropertyField(prop, "m_Addition");
+ PropertyField(prop, "m_Interaction");
--EditorGUI.indentLevel;
}
}
diff --git a/Examples/Example03_ChartAnimation.cs b/Examples/Example03_ChartAnimation.cs
index 5816021e..f02e478b 100644
--- a/Examples/Example03_ChartAnimation.cs
+++ b/Examples/Example03_ChartAnimation.cs
@@ -19,9 +19,9 @@ namespace XCharts.Example
var serie = chart.GetSerie(0);
serie.animation.enable = true;
//自定义每个数据项的渐入延时
- serie.animation.fadein.delayFunction = CustomFadeInDelay;
+ serie.animation.fadeIn.delayFunction = CustomFadeInDelay;
//自定义每个数据项的渐入时长
- serie.animation.fadein.durationFunction = CustomFadeInDuration;
+ serie.animation.fadeIn.durationFunction = CustomFadeInDuration;
}
float CustomFadeInDelay(int dataIndex)
diff --git a/Runtime/Component/Animation/AnimationInfo.cs b/Runtime/Component/Animation/AnimationInfo.cs
index 6901bc10..520dd039 100644
--- a/Runtime/Component/Animation/AnimationInfo.cs
+++ b/Runtime/Component/Animation/AnimationInfo.cs
@@ -403,4 +403,27 @@ namespace XCharts.Runtime
public class AnimationAddition : AnimationInfo
{
}
+
+ ///
+ /// Interactive animation of charts.
+ /// |交互动画。
+ ///
+ [Since("v3.8.0")]
+ [System.Serializable]
+ public class AnimationInteraction : AnimationInfo
+ {
+ [SerializeField][Since("v3.8.0")] private float m_WidthRate = 1.3f;
+ [SerializeField][Since("v3.8.0")] private float m_RadiusRate = 1.3f;
+
+ ///
+ /// the size rate of the width.
+ /// |宽度的放大倍率。
+ ///
+ public float widthRate { get { return m_WidthRate; } set { m_WidthRate = value; } }
+ ///
+ /// the size rate of the radius.
+ /// |半径的放大倍率。
+ ///
+ public float radiusRate { get { return m_RadiusRate; } set { m_RadiusRate = value; } }
+ }
}
\ No newline at end of file
diff --git a/Runtime/Component/Animation/AnimationStyle.cs b/Runtime/Component/Animation/AnimationStyle.cs
index b5351dc9..226e5f42 100644
--- a/Runtime/Component/Animation/AnimationStyle.cs
+++ b/Runtime/Component/Animation/AnimationStyle.cs
@@ -45,7 +45,7 @@ namespace XCharts.Runtime
///
/// the animation of serie. support animation type: fadeIn, fadeOut, change, addition.
- /// |动画组件,用于控制图表的动画播放。支持配置四种动画表现:FadeIn(渐入动画),FadeOut(渐出动画),Change(变更动画),Addition(新增动画)。
+ /// |动画组件,用于控制图表的动画播放。支持配置五种动画表现:FadeIn(渐入动画),FadeOut(渐出动画),Change(变更动画),Addition(新增动画),Interaction(交互动画)。
/// 按作用的对象可以分为两类:SerieAnimation(系列动画)和DataAnimation(数据动画)。
///
[System.Serializable]
@@ -60,6 +60,7 @@ namespace XCharts.Runtime
[SerializeField][Since("v3.8.0")] private AnimationFadeOut m_FadeOut = new AnimationFadeOut() { reverse = true };
[SerializeField][Since("v3.8.0")] private AnimationChange m_Change = new AnimationChange() { duration = 500 };
[SerializeField][Since("v3.8.0")] private AnimationAddition m_Addition = new AnimationAddition() { duration = 500 };
+ [SerializeField][Since("v3.8.0")] private AnimationInteraction m_Interaction = new AnimationInteraction() { duration = 250 };
[Obsolete("Use animation.fadeIn.delayFunction instead.", true)]
public AnimationDelayFunction fadeInDelayFunction;
@@ -99,12 +100,12 @@ namespace XCharts.Runtime
/// Fade in animation configuration.
/// |渐入动画配置。
///
- public AnimationFadeIn fadein { get { return m_FadeIn; } }
+ public AnimationFadeIn fadeIn { get { return m_FadeIn; } }
///
/// Fade out animation configuration.
/// |渐出动画配置。
///
- public AnimationFadeOut fadeout { get { return m_FadeOut; } }
+ public AnimationFadeOut fadeOut { get { return m_FadeOut; } }
///
/// Update data animation configuration.
/// |数据变更动画配置。
@@ -115,6 +116,11 @@ namespace XCharts.Runtime
/// |数据新增动画配置。
///
public AnimationAddition addition { get { return m_Addition; } }
+ ///
+ /// Interaction animation configuration.
+ /// |交互动画配置。
+ ///
+ public AnimationInteraction interaction { get { return m_Interaction; } }
private Vector3 m_LinePathLastPos;
private List m_Animations;
@@ -278,6 +284,7 @@ namespace XCharts.Runtime
startIndex = anim.context.currPointIndex == paths.Count - 1 ?
paths.Count - 2 :
anim.context.currPointIndex;
+ if (startIndex < 0 || startIndex > paths.Count - 2) startIndex = 0;
}
else
{
@@ -523,6 +530,14 @@ namespace XCharts.Runtime
return 0;
}
+ public float GetInteractionDuration()
+ {
+ if (m_Enable && m_Interaction.enable)
+ return m_Interaction.duration;
+ else
+ return 0;
+ }
+
public bool HasFadeOut()
{
return enable && m_FadeOut.context.end;
diff --git a/Runtime/Component/Interaction/InteractData.cs b/Runtime/Component/Interaction/InteractData.cs
index fd9122cb..1333001c 100644
--- a/Runtime/Component/Interaction/InteractData.cs
+++ b/Runtime/Component/Interaction/InteractData.cs
@@ -18,7 +18,7 @@ namespace XCharts.Runtime
public void SetValue(ref bool needInteract, float size, bool highlight, float rate = 1.3f)
{
- size = highlight ? size * rate : size;
+ size = highlight && rate != 0 ? size * rate : size;
SetValue(ref needInteract, size);
}
@@ -81,7 +81,7 @@ namespace XCharts.Runtime
public bool TryGetValue(ref float value, ref bool interacting, float animationDuration = 250)
{
- if (!IsValueEnable() || m_PreviousValue == 0)
+ if (!IsValueEnable() || m_PreviousValue == 0 || animationDuration == 0)
return false;
if (m_UpdateFlag)
{
@@ -106,7 +106,7 @@ namespace XCharts.Runtime
public bool TryGetColor(ref Color32 color, ref bool interacting, float animationDuration = 250)
{
- if (!IsValueEnable())
+ if (!IsValueEnable() || animationDuration == 0)
return false;
if (m_UpdateFlag)
{
@@ -131,7 +131,7 @@ namespace XCharts.Runtime
public bool TryGetColor(ref Color32 color, ref Color32 toColor, ref bool interacting, float animationDuration = 250)
{
- if (!IsValueEnable())
+ if (!IsValueEnable() || animationDuration == 0)
return false;
if (m_UpdateFlag)
{
@@ -157,7 +157,7 @@ namespace XCharts.Runtime
}
public bool TryGetValueAndColor(ref float value, ref Color32 color, ref Color32 toColor, ref bool interacting, float animationDuration = 250)
{
- if (!IsValueEnable())
+ if (!IsValueEnable() || animationDuration == 0)
return false;
if (m_UpdateFlag)
{
diff --git a/Runtime/Serie/Bar/BarHandler.PolarCoord.cs b/Runtime/Serie/Bar/BarHandler.PolarCoord.cs
index f2c860ec..af436cca 100644
--- a/Runtime/Serie/Bar/BarHandler.PolarCoord.cs
+++ b/Runtime/Serie/Bar/BarHandler.PolarCoord.cs
@@ -53,7 +53,7 @@ namespace XCharts.Runtime
if (m_LegendEnter)
{
serie.context.pointerEnter = true;
- serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
+ serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
@@ -139,6 +139,7 @@ namespace XCharts.Runtime
var areaColor = ColorUtil.clearColor32;
var areaToColor = ColorUtil.clearColor32;
var interacting = false;
+ var interactDuration = serie.animation.GetInteractionDuration();
float start, end;
float inside, outside;
@@ -184,7 +185,7 @@ namespace XCharts.Runtime
serieData.context.toAngle = end;
serieData.context.halfAngle = (start + end) / 2;
- if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting))
+ if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting, interactDuration))
{
SerieHelper.GetItemColor(out areaColor, out areaToColor, serie, serieData, chart.theme);
serieData.interact.SetColor(ref interacting, areaColor, areaToColor);
diff --git a/Runtime/Serie/Bar/BarHandler.cs b/Runtime/Serie/Bar/BarHandler.cs
index ea46605e..f1d10adf 100644
--- a/Runtime/Serie/Bar/BarHandler.cs
+++ b/Runtime/Serie/Bar/BarHandler.cs
@@ -183,11 +183,12 @@ namespace XCharts.Runtime
(serie.maxShow > showData.Count ? showData.Count : serie.maxShow) :
showData.Count;
var isPercentStack = SeriesHelper.IsPercentStack(chart.series, serie.stack);
- bool dataChanging = false;
- float dataChangeDuration = serie.animation.GetChangeDuration();
+ var dataChanging = false;
+ var dataChangeDuration = serie.animation.GetChangeDuration();
var dataAddDuration = serie.animation.GetAdditionDuration();
- double yMinValue = relativedAxis.context.minValue;
- double yMaxValue = relativedAxis.context.maxValue;
+ var interactDuration = serie.animation.GetInteractionDuration();
+ var yMinValue = relativedAxis.context.minValue;
+ var yMaxValue = relativedAxis.context.maxValue;
var areaColor = ColorUtil.clearColor32;
var areaToColor = ColorUtil.clearColor32;
@@ -218,7 +219,7 @@ namespace XCharts.Runtime
var borderGapAndWidth = borderWidth + borderGap;
var backgroundColor = itemStyle.backgroundColor;
- if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting))
+ if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting, interactDuration))
{
SerieHelper.GetItemColor(out areaColor, out areaToColor, serie, serieData, chart.theme);
serieData.interact.SetColor(ref interacting, areaColor, areaToColor);
diff --git a/Runtime/Serie/Bar/SimplifiedBarHandler.cs b/Runtime/Serie/Bar/SimplifiedBarHandler.cs
index 5b40dce2..49833431 100644
--- a/Runtime/Serie/Bar/SimplifiedBarHandler.cs
+++ b/Runtime/Serie/Bar/SimplifiedBarHandler.cs
@@ -133,9 +133,10 @@ namespace XCharts.Runtime
(serie.maxShow > showData.Count ? showData.Count : serie.maxShow) :
showData.Count;
- bool dataChanging = false;
- float dataChangeDuration = serie.animation.GetChangeDuration();
+ var dataChanging = false;
+ var dataChangeDuration = serie.animation.GetChangeDuration();
var dataAddDuration = serie.animation.GetAdditionDuration();
+ var interactDuration = serie.animation.GetInteractionDuration();
double yMinValue = relativedAxis.context.minValue;
double yMaxValue = relativedAxis.context.maxValue;
@@ -165,7 +166,7 @@ namespace XCharts.Runtime
var relativedValue = serieData.GetCurrData(1, dataAddDuration, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue, serie.animation.unscaledTime);
var borderWidth = relativedValue == 0 ? 0 : itemStyle.runtimeBorderWidth;
- if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting))
+ if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting, interactDuration))
{
SerieHelper.GetItemColor(out areaColor, out areaToColor, serie, serieData, chart.theme);
serieData.interact.SetColor(ref interacting, areaColor, areaToColor);
@@ -217,7 +218,7 @@ namespace XCharts.Runtime
else
{
if (axis.context.minMaxRange <= 0) pY = grid.context.y;
- else pY = grid.context.y + (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth);
+ else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth);
}
pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
}
@@ -230,7 +231,7 @@ namespace XCharts.Runtime
else
{
if (axis.context.minMaxRange <= 0) pX = grid.context.x;
- else pX = grid.context.x + (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth);
+ else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth);
}
pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0);
}
diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs b/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs
index c2ed3ffc..879e9268 100644
--- a/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs
+++ b/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs
@@ -53,7 +53,7 @@ namespace XCharts.Runtime
if (m_LegendEnter)
{
serie.context.pointerEnter = true;
- serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
+ serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs
index f6fc6db7..c4564619 100644
--- a/Runtime/Serie/Line/LineHandler.GridCoord.cs
+++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs
@@ -61,7 +61,7 @@ namespace XCharts.Runtime
if (m_LegendEnter)
{
serie.context.pointerEnter = true;
- serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
+ serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
@@ -73,7 +73,7 @@ namespace XCharts.Runtime
else if (serie.context.isTriggerByAxis)
{
serie.context.pointerEnter = false;
- serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
+ serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
@@ -116,7 +116,7 @@ namespace XCharts.Runtime
needInteract = true;
}
if (serie.context.pointerItemDataIndex >= 0)
- serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
+ serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate);
else
serie.interact.SetValue(ref needInteract, lineWidth);
}
@@ -144,6 +144,7 @@ namespace XCharts.Runtime
var lineArrow = serie.lineArrow;
var visualMap = chart.GetVisualMapOfSerie(serie);
var isVisualMapGradient = VisualMapHelper.IsNeedLineGradient(visualMap);
+ var interactDuration = serie.animation.GetInteractionDuration();
Axis axis;
Axis relativedAxis;
@@ -176,7 +177,7 @@ namespace XCharts.Runtime
continue;
var symbolSize = 0f;
- if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting))
+ if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
{
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state);
serieData.interact.SetValue(ref interacting, symbolSize);
diff --git a/Runtime/Serie/Line/LineHandler.PolarCoord.cs b/Runtime/Serie/Line/LineHandler.PolarCoord.cs
index 1c34e96a..3567d839 100644
--- a/Runtime/Serie/Line/LineHandler.PolarCoord.cs
+++ b/Runtime/Serie/Line/LineHandler.PolarCoord.cs
@@ -53,7 +53,7 @@ namespace XCharts.Runtime
if (m_LegendEnter)
{
serie.context.pointerEnter = true;
- serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
+ serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
diff --git a/Runtime/Serie/Line/LineHelper.cs b/Runtime/Serie/Line/LineHelper.cs
index 4e99f640..d188a0d8 100644
--- a/Runtime/Serie/Line/LineHelper.cs
+++ b/Runtime/Serie/Line/LineHelper.cs
@@ -410,7 +410,7 @@ namespace XCharts.Runtime
public static float GetLineWidth(ref bool interacting, Serie serie, float defaultWidth)
{
var lineWidth = 0f;
- if (!serie.interact.TryGetValue(ref lineWidth, ref interacting))
+ if (!serie.interact.TryGetValue(ref lineWidth, ref interacting, serie.animation.GetInteractionDuration()))
{
lineWidth = serie.lineStyle.GetWidth(defaultWidth);
serie.interact.SetValue(ref interacting, lineWidth);
diff --git a/Runtime/Serie/Line/SimplifiedLineHandler.cs b/Runtime/Serie/Line/SimplifiedLineHandler.cs
index 75f411bb..6dc165af 100644
--- a/Runtime/Serie/Line/SimplifiedLineHandler.cs
+++ b/Runtime/Serie/Line/SimplifiedLineHandler.cs
@@ -66,14 +66,13 @@ namespace XCharts.Runtime
}
m_LastCheckContextFlag = needCheck;
var themeSymbolSize = chart.theme.serie.lineSymbolSize;
- var themeSymbolSelectedSize = chart.theme.serie.lineSymbolSelectedSize;
lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth);
var needInteract = false;
if (m_LegendEnter)
{
serie.context.pointerEnter = true;
- serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
+ serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
@@ -85,7 +84,7 @@ namespace XCharts.Runtime
else if (serie.context.isTriggerByAxis)
{
serie.context.pointerEnter = true;
- serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate);
+ serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate);
for (int i = 0; i < serie.dataCount; i++)
{
var serieData = serie.data[i];
diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs
index 1ab840e0..97158704 100644
--- a/Runtime/Serie/Radar/RadarHandler.cs
+++ b/Runtime/Serie/Radar/RadarHandler.cs
@@ -240,6 +240,7 @@ namespace XCharts.Runtime
SerieHelper.GetAllMinMaxData(serie, m_RadarCoord.ceilRate);
Color32 areaColor, areaToColor;
var startAngle = m_RadarCoord.startAngle * Mathf.PI / 180;
+ var interactDuration = serie.animation.GetInteractionDuration();
for (int j = 0; j < serie.data.Count; j++)
{
var serieData = serie.data[j];
@@ -331,7 +332,7 @@ namespace XCharts.Runtime
{
var point = serieData.context.dataPoints[m];
var symbolSize = 0f;
- if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting))
+ if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
{
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, serieState);
serieData.interact.SetValue(ref interacting, symbolSize);
diff --git a/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Runtime/Serie/Scatter/BaseScatterHandler.cs
index 7228c29e..c56db250 100644
--- a/Runtime/Serie/Scatter/BaseScatterHandler.cs
+++ b/Runtime/Serie/Scatter/BaseScatterHandler.cs
@@ -77,7 +77,6 @@ namespace XCharts.Runtime
serie.context.pointerItemDataIndex = -1;
serie.context.pointerEnter = false;
var themeSymbolSize = chart.theme.serie.scatterSymbolSize;
- var themeSymbolSelectedSize = chart.theme.serie.scatterSymbolSelectedSize;
var needInteract = false;
for (int i = serie.dataCount - 1; i >= 0; i--)
{
@@ -134,6 +133,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(0, 1);
var rate = serie.animation.GetCurrRate();
var dataChangeDuration = serie.animation.GetChangeDuration();
+ var interactDuration = serie.animation.GetInteractionDuration();
var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false;
var interacting = false;
@@ -177,7 +177,7 @@ namespace XCharts.Runtime
serieData.context.position = pos;
var datas = serieData.data;
var symbolSize = 0f;
- if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting))
+ if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration))
{
symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state);
serieData.interact.SetValue(ref interacting, symbolSize);
diff --git a/Runtime/Serie/SerieHelper.cs b/Runtime/Serie/SerieHelper.cs
index 3340970f..50ea076b 100644
--- a/Runtime/Serie/SerieHelper.cs
+++ b/Runtime/Serie/SerieHelper.cs
@@ -675,6 +675,7 @@ namespace XCharts.Runtime
public static float GetSysmbolSize(Serie serie, SerieData serieData, ThemeStyle theme, float defaultSize, SerieState state = SerieState.Auto)
{
+ if (serie == null) return defaultSize;
if (state == SerieState.Auto)
state = GetSerieState(serie, serieData);
var stateStyle = GetStateStyle(serie, serieData, state);
@@ -687,7 +688,7 @@ namespace XCharts.Runtime
{
case SerieState.Emphasis:
case SerieState.Select:
- size *= theme.serie.selectedRate;
+ size *= serie.animation.interaction.radiusRate;
break;
default:
break;
@@ -698,7 +699,10 @@ namespace XCharts.Runtime
var symbol = stateStyle.symbol;
size = symbol.GetSize(serieData == null ? null : serieData.data, defaultSize);
}
- size = (float)serieData.GetAddAnimationData(0, size, serie.animation.GetAdditionDuration());
+ if (serieData != null)
+ {
+ size = (float)serieData.GetAddAnimationData(0, size, serie.animation.GetAdditionDuration());
+ }
return size;
}
diff --git a/Runtime/Theme/SerieTheme.cs b/Runtime/Theme/SerieTheme.cs
index c97a693d..a6e6f478 100644
--- a/Runtime/Theme/SerieTheme.cs
+++ b/Runtime/Theme/SerieTheme.cs
@@ -10,7 +10,6 @@ namespace XCharts.Runtime
[SerializeField] protected float m_LineSymbolSize;
[SerializeField] protected float m_ScatterSymbolSize;
[SerializeField] protected float m_PieTooltipExtraRadius;
- [SerializeField] protected float m_SelectedRate = 1.3f;
[SerializeField] protected float m_PieSelectedOffset;
[SerializeField] protected Color32 m_CandlestickColor = new Color32(235, 84, 84, 255);
[SerializeField] protected Color32 m_CandlestickColor0 = new Color32(71, 178, 98, 255);
@@ -37,11 +36,6 @@ namespace XCharts.Runtime
set { if (PropertyUtil.SetStruct(ref m_LineSymbolSize, value)) SetVerticesDirty(); }
}
///
- /// the selected symbol size of line serie.
- /// |折线图Symbol在被选中状态时的大小。
- ///
- public float lineSymbolSelectedSize { get { return lineSymbolSize * selectedRate; } }
- ///
/// the symbol size of scatter serie.
/// |散点图的Symbol大小。
///
@@ -50,21 +44,6 @@ namespace XCharts.Runtime
get { return m_ScatterSymbolSize; }
set { if (PropertyUtil.SetStruct(ref m_ScatterSymbolSize, value)) SetVerticesDirty(); }
}
- ///
- /// the selected symbol size of scatter serie.
- /// |散点图的Symbol在被选中状态时的大小。
- ///
- public float scatterSymbolSelectedSize { get { return scatterSymbolSize * selectedRate; } }
- ///
- /// the rate of symbol size of line or scatter serie.
- /// |折线图或散点图在被选中时的放大倍数。
- ///
- public float selectedRate
- {
- get { return m_SelectedRate; }
- set { if (PropertyUtil.SetStruct(ref m_SelectedRate, value)) SetVerticesDirty(); }
- }
-
///
/// the extra radius of pie when actived by tooltip.
/// |饼图鼠标移到高亮时的额外半径
@@ -130,7 +109,6 @@ namespace XCharts.Runtime
m_LineWidth = theme.lineWidth;
m_LineSymbolSize = theme.lineSymbolSize;
m_ScatterSymbolSize = theme.scatterSymbolSize;
- selectedRate = theme.selectedRate;
m_PieTooltipExtraRadius = theme.pieTooltipExtraRadius;
m_PieSelectedOffset = theme.pieSelectedOffset;
m_CandlestickColor = theme.candlestickColor;