Skip to content

Commit 9f9bb74

Browse files
committed
增加条形图
1 parent 0bc8d88 commit 9f9bb74

File tree

6 files changed

+195
-33
lines changed

6 files changed

+195
-33
lines changed

Assets/Scenes/TestGraph.unity

13.3 KB
Binary file not shown.
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
using UnityEngine.UI;
5+
6+
/// <summary>
7+
/// 条形图
8+
/// </summary>
9+
public class UIBarGraphManager : MonoBehaviour
10+
{
11+
public GraphData[] _datas;//数据
12+
public float _barWidth = 20;//条宽
13+
public Transform _leftSide;//左侧描述
14+
public RectTransform _descContent;//描述Content
15+
public RectTransform _barContent;//条Content
16+
public RectTransform _descPrefab;//描述Prefab
17+
public RectTransform _barPrefab;//条Prefab
18+
19+
//描述、条 管理
20+
private RectTransform[] _descs;
21+
private RectTransform[] _bars;
22+
//描述、条 对象池
23+
private List<RectTransform> _descPool;
24+
private List<RectTransform> _barPool;
25+
26+
/// <summary>
27+
/// 初始化条形图
28+
/// </summary>
29+
public void InitBarGraph(GraphData[] data)
30+
{
31+
//leftSide
32+
for (int i = 0; i < _leftSide.childCount; i++)
33+
{
34+
_leftSide.GetChild(i).GetComponent<Text>().text = (100 - i * 10).ToString();
35+
}
36+
_datas = data;
37+
RefeshBarGraph(_datas);
38+
}
39+
40+
/// <summary>
41+
/// 刷新条形图
42+
/// </summary>
43+
public void RefeshBarGraph(GraphData[] data)
44+
{
45+
_datas = data;
46+
ClearTransform(_descs, _descPool);
47+
ClearTransform(_bars, _barPool);
48+
DrawDesc();
49+
DrawBar();
50+
}
51+
52+
/// <summary>
53+
/// 底部描述
54+
/// </summary>
55+
private void DrawDesc()
56+
{
57+
_descs = new RectTransform[_datas.Length];
58+
for (int i = 0; i < _datas.Length; i++)
59+
{
60+
RectTransform desc = GetTransform(_descPrefab, _descContent, ref _descPool);
61+
desc.GetComponent<Text>().text = _datas[i]._desc;
62+
desc.SetAsLastSibling();//使用对象池和自动布局组件会调乱顺序,要重置
63+
desc.gameObject.SetActive(true);
64+
_descs[i] = desc;
65+
}
66+
LayoutRebuilder.ForceRebuildLayoutImmediate(_descContent);//使用自动布局组件要刷新UI,刷新位置
67+
}
68+
69+
/// <summary>
70+
/// 画条
71+
/// </summary>
72+
private void DrawBar()
73+
{
74+
_bars = new RectTransform[_datas.Length];
75+
for (int i = 0; i < _datas.Length; i++)
76+
{
77+
RectTransform bar = GetTransform(_barPrefab, _barContent, ref _barPool);
78+
bar.sizeDelta = new Vector2(_barWidth, bar.sizeDelta.y);
79+
bar.localPosition = new Vector3(_descs[i].localPosition.x, bar.localPosition.y, 0);//锚点在中心
80+
bar.GetComponent<Image>().fillAmount = _datas[i].Rate;
81+
bar.gameObject.SetActive(true);
82+
_bars[i] = bar;
83+
}
84+
}
85+
86+
/// <summary>
87+
/// 入池
88+
/// </summary>
89+
/// <param name="trans"></param>
90+
/// <param name="pool"></param>
91+
private void ClearTransform(RectTransform[] trans, List<RectTransform> pool)
92+
{
93+
if (trans == null) return;
94+
for (int i = 0; i < trans.Length; i++)
95+
{
96+
trans[i].gameObject.SetActive(false);
97+
pool.Add(trans[i]);
98+
}
99+
}
100+
101+
/// <summary>
102+
/// Instantiate
103+
/// </summary>
104+
/// <param name="prefab"></param>
105+
/// <param name="parent"></param>
106+
/// <param name="pool">对象池</param>
107+
/// <returns></returns>
108+
private RectTransform GetTransform(RectTransform prefab, RectTransform parent, ref List<RectTransform> pool)
109+
{
110+
if (pool == null) pool = new List<RectTransform>();//这里不用ref的话,相当于没有new空间,可能是直接被回收了
111+
if (pool.Count <= 0)
112+
{
113+
return Instantiate(prefab, parent);
114+
}
115+
RectTransform temp = pool[0];
116+
pool.RemoveAt(0);
117+
return temp;
118+
}
119+
}

Assets/Scripts/TestGraph/UIBarGraphManager.cs.meta

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
5+
public class UIGraphManager : MonoBehaviour
6+
{
7+
8+
public UILineGraphManager _line;
9+
public UIBarGraphManager _bar;
10+
private GraphData[] _datas;
11+
12+
private void Start()
13+
{
14+
RefeshData();
15+
_line.RefeshLineGraph(_datas);
16+
_bar.RefeshBarGraph(_datas);
17+
}
18+
19+
private void Update()
20+
{
21+
if (Input.GetKeyDown(KeyCode.R))
22+
{
23+
RefeshData();
24+
_line.RefeshLineGraph(_datas);
25+
_bar.RefeshBarGraph(_datas);
26+
}
27+
}
28+
29+
/// <summary>
30+
/// 初始化数据
31+
/// </summary>
32+
public void RefeshData()
33+
{
34+
_datas = new GraphData[10];
35+
for (int i = 0; i < _datas.Length; i++)
36+
{
37+
_datas[i] = new GraphData(i.ToString(), Random.Range(0, 100));
38+
}
39+
}
40+
}

Assets/Scripts/TestGraph/UIGraphManager.cs.meta

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scripts/TestGraph/UILineGraphManager.cs

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using UnityEngine.UI;
55

66
[System.Serializable]
7-
public struct LineData
7+
public struct GraphData
88
{
99
public string _desc;
1010
[Range(0, 100)]
@@ -18,15 +18,19 @@ public float Rate
1818
}
1919
}
2020

21-
public LineData(string desc, float value)
21+
public GraphData(string desc, float value)
2222
{
2323
_desc = desc;
2424
_value = value;
2525
}
2626
}
27+
28+
/// <summary>
29+
/// 折线图
30+
/// </summary>
2731
public class UILineGraphManager : MonoBehaviour
2832
{
29-
public LineData[] _datas;//数据
33+
public GraphData[] _datas;//数据
3034
public float _lineWidth = 3;//线宽
3135
public float _dotRadius = 2;//点半径
3236
public Transform _leftSide;//左侧描述
@@ -46,51 +50,26 @@ public class UILineGraphManager : MonoBehaviour
4650
private List<RectTransform> _dotPool;
4751
private List<RectTransform> _linePool;
4852

49-
private void Start()
50-
{
51-
InitData();
52-
InitLineGraph();
53-
}
54-
55-
private void Update()
56-
{
57-
if (Input.GetKeyDown(KeyCode.R))
58-
{
59-
RefeshLineGraph();
60-
}
61-
}
62-
63-
/// <summary>
64-
/// 初始化数据
65-
/// </summary>
66-
public void InitData()
67-
{
68-
_datas = new LineData[10];
69-
for (int i = 0; i < _datas.Length; i++)
70-
{
71-
_datas[i] = new LineData(i.ToString(), Random.Range(0, 100));
72-
}
73-
}
74-
7553
/// <summary>
7654
/// 初始化折线图
7755
/// </summary>
78-
public void InitLineGraph()
56+
public void InitLineGraph(GraphData[] data)
7957
{
8058
//leftSide
8159
for (int i = 0; i < _leftSide.childCount; i++)
8260
{
8361
_leftSide.GetChild(i).GetComponent<Text>().text = (100 - i * 10).ToString();
8462
}
85-
RefeshLineGraph();
63+
_datas = data;
64+
RefeshLineGraph(_datas);
8665
}
8766

8867
/// <summary>
8968
/// 刷新折线图
9069
/// </summary>
91-
public void RefeshLineGraph()
70+
public void RefeshLineGraph(GraphData[] data)
9271
{
93-
InitData();//ceshi
72+
_datas = data;
9473
ClearTransform(_descs, _descPool);
9574
ClearTransform(_dots, _dotPool);
9675
ClearTransform(_lines, _linePool);

0 commit comments

Comments
 (0)