mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-14 20:00:09 +00:00
增加部分鼠标事件回调
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
|
||||
# 更新日志
|
||||
|
||||
* (2020.05.16) 增加部分鼠标事件回调
|
||||
* (2020.05.15) 优化自带例子,`Demo`改名为`Example`
|
||||
* (2020.05.13) 增加`Serie`的`large`和`largeThreshold`参数配置折线图和柱状图的性能模式
|
||||
* (2020.05.13) 完善Demo,增加性能演示Demo
|
||||
|
||||
@@ -13,7 +13,17 @@
|
||||
* `BaseChart.series`:系列列表`Series`。
|
||||
* `BaseChart.chartWidth`:图表的宽。
|
||||
* `BaseChart.chartHeight`:图表的高。
|
||||
* `BaseChart.customDrawCallback`:自定义绘制回调函数。
|
||||
* `BaseChart.forceOpenRaycastTarget`:强制开启鼠标事件检测。一般不用手动设置,内部会自动判断是否需要检测。
|
||||
* `BaseChart.onCustomDraw`:自定义绘制回调。
|
||||
* `BaseChart.onPointerClick`:鼠标点击回调。
|
||||
* `BaseChart.onPointerDown`:鼠标按下回调。
|
||||
* `BaseChart.onPointerUp`:鼠标弹起回调。
|
||||
* `BaseChart.onPointerEnter`:鼠标进入图表回调。
|
||||
* `BaseChart.onPointerExit`:鼠标退出图表回调。
|
||||
* `BaseChart.onBeginDrag`:鼠标开始拖拽回调。
|
||||
* `BaseChart.onDrag`:鼠标拖拽回调。
|
||||
* `BaseChart.onEndDrag`:鼠标结束拖拽回调。
|
||||
* `BaseChart.onScroll`:鼠标滚动回调。
|
||||
* `BaseChart.SetSize(float width, float height)`: 设置图表的宽高(在非stretch pivot下才有效,其他情况需要自己调整RectTransform)。
|
||||
* `BaseChart.ClearData()`:清除所有数据,系列列表会保留,只是移除列表中系列的数据。
|
||||
* `BaseChart.RemoveData()`:清除所有系列和图例数据,系列列表也会被清除。
|
||||
@@ -49,6 +59,8 @@
|
||||
* `BaseChart.AnimationResume()`:继续动画。
|
||||
* `BaseChart.AnimationReset()`:重置动画。
|
||||
* `BaseChart.ClickLegendButton(int legendIndex, string legendName, bool show)`:点击图例按钮。
|
||||
* `BaseChart.IsInChart(Vector2 local)`:坐标是否在图表范围内。
|
||||
* `BaseChart.IsInChart(float x, float y)`:坐标是否在图表范围内。
|
||||
|
||||
## `CoordinateChart`
|
||||
|
||||
@@ -70,6 +82,14 @@
|
||||
* `CoordinateChart.IsValue()`:是否是纯数值坐标。
|
||||
* `CoordinateChart.RefreshDataZoom()`:在下一帧刷新DataZoom组件。
|
||||
* `CoordinateChart.RefreshAxisMinMaxValue()`:立即刷新数值坐标轴的最大最小值(更新坐标轴标签并触发重绘)。
|
||||
* `CoordinateChart.IsInCooridate(Vector2 local)`:坐标是否在坐标轴内。
|
||||
* `CoordinateChart.IsInCooridate(Vector3 local)`:坐标是否在坐标轴内。
|
||||
* `CoordinateChart.IsInCooridate(float x, float y)`:坐标是否在坐标轴内。
|
||||
* `CoordinateChart.IsInCooridate(Vector2 local)`:坐标是否在坐标轴内。
|
||||
* `CoordinateChart.ClampInCoordinate(Vector3 pos)`:将坐标限制在坐标系内。
|
||||
* `CoordinateChart.CovertXYAxis(int index)`:转换X轴和Y轴的配置。
|
||||
* `CoordinateChart.UpdateCoordinate()`:更新坐标系原点和宽高。一般内部会自动更新,也可强制更新。
|
||||
* `CoordinateChart.SetMaxCache(int maxCache)`:设置可缓存的最大数据量。当数据量超过该值时,会自动删除第一个值再加入最新值。
|
||||
|
||||
## `LineChart`
|
||||
|
||||
|
||||
65
Assets/XCharts/Examples/Runtime/Example02_ChartEvent.cs
Normal file
65
Assets/XCharts/Examples/Runtime/Example02_ChartEvent.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
/******************************************/
|
||||
/* */
|
||||
/* Copyright (c) 2018 monitor1394 */
|
||||
/* https://github.com/monitor1394 */
|
||||
/* */
|
||||
/******************************************/
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace XCharts.Examples
|
||||
{
|
||||
[DisallowMultipleComponent]
|
||||
[ExecuteInEditMode]
|
||||
public class Example02_ChartEvent : MonoBehaviour
|
||||
{
|
||||
private float updateTime = 0;
|
||||
BaseChart chart;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
chart = gameObject.GetComponent<BaseChart>();
|
||||
if (chart == null)
|
||||
{
|
||||
chart = gameObject.AddComponent<LineChart>();
|
||||
}
|
||||
chart.onPointerEnter = OnPointerEnter;
|
||||
chart.onPointerExit = OnPointerExit;
|
||||
chart.onPointerDown = OnPointerDown;
|
||||
chart.onPointerUp = OnPointerUp;
|
||||
chart.onPointerClick = OnPointerClick;
|
||||
chart.onScroll = OnScroll;
|
||||
}
|
||||
|
||||
void OnPointerEnter(BaseChart chart, PointerEventData eventData)
|
||||
{
|
||||
//Debug.LogError("enter:" + chart);
|
||||
}
|
||||
|
||||
void OnPointerExit(BaseChart chart, PointerEventData eventData)
|
||||
{
|
||||
//Debug.LogError("exit:" + chart);
|
||||
}
|
||||
|
||||
void OnPointerDown(BaseChart chart, PointerEventData eventData)
|
||||
{
|
||||
//Debug.LogError("down:" + chart);
|
||||
}
|
||||
|
||||
void OnPointerUp(BaseChart chart, PointerEventData eventData)
|
||||
{
|
||||
//Debug.LogError("up:" + chart);
|
||||
}
|
||||
|
||||
void OnPointerClick(BaseChart chart, PointerEventData eventData)
|
||||
{
|
||||
//Debug.LogError("click:" + chart);
|
||||
}
|
||||
|
||||
void OnScroll(BaseChart chart, PointerEventData eventData)
|
||||
{
|
||||
//Debug.LogError("scroll:" + chart);
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/XCharts/Examples/Runtime/Example02_ChartEvent.cs.meta
Normal file
11
Assets/XCharts/Examples/Runtime/Example02_ChartEvent.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c549dc496cd86467e8286252906562cc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -21,7 +21,7 @@ namespace XCharts.Examples
|
||||
chart = gameObject.GetComponent<LineChart>();
|
||||
if (chart == null) return;
|
||||
|
||||
chart.customDrawCallback = delegate (VertexHelper vh)
|
||||
chart.onCustomDraw = delegate (VertexHelper vh)
|
||||
{
|
||||
var dataPoints = chart.series.list[0].dataPoints;
|
||||
if (dataPoints.Count > 0)
|
||||
|
||||
@@ -9,6 +9,7 @@ using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
namespace XCharts
|
||||
{
|
||||
@@ -88,7 +89,6 @@ namespace XCharts
|
||||
/// The position of chart.
|
||||
/// 图表的左下角起始坐标。
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public Vector3 chartPosition { get { return m_ChartPosition; } }
|
||||
public Rect chartRect { get { return m_ChartRect; } }
|
||||
/// <summary>
|
||||
@@ -97,13 +97,53 @@ namespace XCharts
|
||||
/// </summary>
|
||||
public Vector2 pointerPos { get; protected set; }
|
||||
/// <summary>
|
||||
/// 自定义绘制回调。
|
||||
/// </summary>
|
||||
public Action<VertexHelper> customDrawCallback { set { m_CustomDrawCallback = value; } }
|
||||
/// <summary>
|
||||
/// 警告信息。
|
||||
/// </summary>
|
||||
public string warningInfo { get; protected set; }
|
||||
/// <summary>
|
||||
/// 强制开启鼠标事件检测。
|
||||
/// </summary>
|
||||
public bool forceOpenRaycastTarget { get { return m_ForceOpenRaycastTarget; } set { m_ForceOpenRaycastTarget = value; } }
|
||||
/// <summary>
|
||||
/// 自定义绘制回调。
|
||||
/// </summary>
|
||||
public Action<VertexHelper> onCustomDraw { set { m_OnCustomDrawCallback = value; } }
|
||||
/// <summary>
|
||||
/// 鼠标点击回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onPointerClick { set { m_OnPointerClick = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标按下回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onPointerDown { set { m_OnPointerDown = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标弹起回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onPointerUp { set { m_OnPointerUp = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标进入回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onPointerEnter { set { m_OnPointerEnter = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标退出回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onPointerExit { set { m_OnPointerExit = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标开始拖拽回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onBeginDrag { set { m_OnBeginDrag = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标拖拽回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onDrag { set { m_OnDrag = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标结束拖拽回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onEndDrag { set { m_OnEndDrag = value; m_ForceOpenRaycastTarget = true; } }
|
||||
/// <summary>
|
||||
/// 鼠标滚动回调。
|
||||
/// </summary>
|
||||
public Action<BaseChart, PointerEventData> onScroll { set { m_OnScroll = value; m_ForceOpenRaycastTarget = true; } }
|
||||
|
||||
/// <summary>
|
||||
/// 设置图表的宽高(在非stretch pivot下才有效,其他情况需要自己调整RectTransform)
|
||||
@@ -704,5 +744,8 @@ namespace XCharts
|
||||
|
||||
[Obsolete("Use BaseChart.AnimationFadeOut() instead.", true)]
|
||||
public void MissAnimationStart() { }
|
||||
|
||||
[Obsolete("Use onCustomDraw instead.", false)]
|
||||
public Action<VertexHelper> customDrawCallback { set { m_OnCustomDrawCallback = value; } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,7 +140,6 @@ namespace XCharts
|
||||
/// reutrn true when all the show axis is `Value` type.
|
||||
/// 纯数值坐标轴(数值轴或对数轴)。
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool IsValue()
|
||||
{
|
||||
foreach (var axis in m_XAxises)
|
||||
@@ -154,6 +153,9 @@ namespace XCharts
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 纯类目轴。
|
||||
/// </summary>
|
||||
public bool IsCategory()
|
||||
{
|
||||
foreach (var axis in m_XAxises)
|
||||
@@ -167,6 +169,9 @@ namespace XCharts
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 坐标是否在坐标轴内。
|
||||
/// </summary>
|
||||
public bool IsInCooridate(Vector2 local)
|
||||
{
|
||||
return IsInCooridate(local.x, local.y);
|
||||
@@ -253,7 +258,7 @@ namespace XCharts
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置可缓存的最大数据量。
|
||||
/// 设置可缓存的最大数据量。当数据量超过该值时,会自动删除第一个值再加入最新值。
|
||||
/// </summary>
|
||||
public void SetMaxCache(int maxCache)
|
||||
{
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace XCharts
|
||||
}
|
||||
|
||||
public partial class BaseChart : MaskableGraphic, IPointerDownHandler, IPointerUpHandler,
|
||||
IPointerEnterHandler, IPointerExitHandler, IBeginDragHandler,
|
||||
IPointerEnterHandler, IPointerExitHandler, IBeginDragHandler, IPointerClickHandler,
|
||||
IDragHandler, IEndDragHandler, IScrollHandler
|
||||
{
|
||||
protected static readonly string s_TitleObjectName = "title";
|
||||
@@ -53,9 +53,20 @@ namespace XCharts
|
||||
[SerializeField] protected Series m_Series = Series.defaultSeries;
|
||||
[SerializeField] protected Settings m_Settings = new Settings();
|
||||
[SerializeField] protected float m_Large = 1;
|
||||
[SerializeField] protected Action<VertexHelper> m_CustomDrawCallback;
|
||||
[SerializeField] protected string m_DebugInfo = "";
|
||||
|
||||
[SerializeField] protected Action<VertexHelper> m_OnCustomDrawCallback;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnPointerClick;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnPointerDown;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnPointerUp;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnPointerEnter;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnPointerExit;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnBeginDrag;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnDrag;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnEndDrag;
|
||||
[SerializeField] protected Action<BaseChart, PointerEventData> m_OnScroll;
|
||||
|
||||
|
||||
[NonSerialized] private Theme m_CheckTheme = 0;
|
||||
[NonSerialized] protected Vector3 m_ChartPosition = Vector3.zero;
|
||||
[NonSerialized] protected Vector2 m_ChartMinAnchor;
|
||||
@@ -72,6 +83,7 @@ namespace XCharts
|
||||
[NonSerialized] protected bool m_IsPlayingAnimation = false;
|
||||
[NonSerialized] protected List<string> m_LegendRealShowName = new List<string>();
|
||||
[NonSerialized] protected GameObject m_SerieLabelRoot;
|
||||
[NonSerialized] protected bool m_ForceOpenRaycastTarget;
|
||||
|
||||
protected Vector2 chartAnchorMax { get { return m_ChartMinAnchor; } }
|
||||
protected Vector2 chartAnchorMin { get { return m_ChartMaxAnchor; } }
|
||||
@@ -528,6 +540,7 @@ namespace XCharts
|
||||
|
||||
private void CheckPointerPos()
|
||||
{
|
||||
if (m_ForceOpenRaycastTarget) raycastTarget = true;
|
||||
var needCheck = (m_Tooltip.show && m_Tooltip.runtimeInited)
|
||||
|| raycastTarget;
|
||||
if (needCheck)
|
||||
@@ -737,9 +750,9 @@ namespace XCharts
|
||||
vh.Clear();
|
||||
DrawBackground(vh);
|
||||
DrawChart(vh);
|
||||
if (m_CustomDrawCallback != null)
|
||||
if (m_OnCustomDrawCallback != null)
|
||||
{
|
||||
m_CustomDrawCallback(vh);
|
||||
m_OnCustomDrawCallback(vh);
|
||||
}
|
||||
DrawTooltip(vh);
|
||||
m_RefreshLabel = true;
|
||||
@@ -886,36 +899,49 @@ namespace XCharts
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void OnPointerClick(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnPointerClick != null) m_OnPointerClick(this, eventData);
|
||||
}
|
||||
|
||||
public virtual void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnPointerDown != null) m_OnPointerDown(this, eventData);
|
||||
}
|
||||
|
||||
public virtual void OnPointerUp(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnPointerUp != null) m_OnPointerUp(this, eventData);
|
||||
}
|
||||
|
||||
public virtual void OnPointerEnter(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnPointerEnter != null) m_OnPointerEnter(this, eventData);
|
||||
}
|
||||
|
||||
public virtual void OnPointerExit(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnPointerExit != null) m_OnPointerExit(this, eventData);
|
||||
}
|
||||
|
||||
public virtual void OnBeginDrag(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnBeginDrag != null) m_OnBeginDrag(this, eventData);
|
||||
}
|
||||
|
||||
public virtual void OnEndDrag(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnEndDrag != null) m_OnEndDrag(this, eventData);
|
||||
}
|
||||
|
||||
public virtual void OnDrag(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnDrag != null) m_OnDrag(this, eventData);
|
||||
}
|
||||
|
||||
public virtual void OnScroll(PointerEventData eventData)
|
||||
{
|
||||
if (m_OnScroll != null) m_OnScroll(this, eventData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1505,6 +1505,7 @@ namespace XCharts
|
||||
|
||||
public override void OnBeginDrag(PointerEventData eventData)
|
||||
{
|
||||
base.OnBeginDrag(eventData);
|
||||
if (Input.touchCount > 1) return;
|
||||
Vector2 pos;
|
||||
if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform,
|
||||
@@ -1539,6 +1540,7 @@ namespace XCharts
|
||||
|
||||
public override void OnDrag(PointerEventData eventData)
|
||||
{
|
||||
base.OnDrag(eventData);
|
||||
if (Input.touchCount > 1) return;
|
||||
float deltaX = eventData.delta.x;
|
||||
float deltaPercent = deltaX / m_CoordinateWidth * 100;
|
||||
@@ -1634,6 +1636,7 @@ namespace XCharts
|
||||
|
||||
public override void OnEndDrag(PointerEventData eventData)
|
||||
{
|
||||
base.OnEndDrag(eventData);
|
||||
if (m_DataZoomDrag || m_DataZoomStartDrag || m_DataZoomEndDrag || m_DataZoomCoordinateDrag)
|
||||
{
|
||||
RefreshChart();
|
||||
@@ -1647,6 +1650,7 @@ namespace XCharts
|
||||
|
||||
public override void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
base.OnPointerDown(eventData);
|
||||
if (Input.touchCount > 1) return;
|
||||
Vector2 localPos;
|
||||
if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform,
|
||||
@@ -1686,6 +1690,7 @@ namespace XCharts
|
||||
|
||||
public override void OnScroll(PointerEventData eventData)
|
||||
{
|
||||
base.OnScroll(eventData);
|
||||
if (Input.touchCount > 1) return;
|
||||
if (!m_DataZoom.enable || m_DataZoom.zoomLock) return;
|
||||
Vector2 pos;
|
||||
|
||||
@@ -573,6 +573,8 @@ namespace XCharts
|
||||
|
||||
public override void OnPointerDown(PointerEventData eventData)
|
||||
{
|
||||
base.OnPointerDown(eventData);
|
||||
|
||||
Vector2 local;
|
||||
if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform,
|
||||
eventData.position, canvas.worldCamera, out local))
|
||||
|
||||
Reference in New Issue
Block a user