このセクションでは、移植可能アプリまたは共有アプリに Sunburst チャートコントロールを追加し、そこにデータを追加する方法について説明します。このトピックは 3 つの手順で構成されます。
次の図は、上記の手順を実行した後の Sunburst チャートを示しています。
次のクラスは、Sunburst チャートコントロールのデータソースとして機能します。
DataService |
コードのコピー
|
---|---|
public class DataService { Random rnd = new Random(); static DataService _default; public static DataService Instance { get { if (_default == null) { _default = new DataService(); } return _default; } } public static List<SunburstDataItem> CreateHierarchicalData() { Random rnd = Instance.rnd; List<string> years = new List<string>(); List<List<string>> times = new List<List<string>>() { new List<string>() { "1月", "2月", "3月"}, new List<string>() { "4月", "5月", "6月"}, new List<string>() { "7月", "8月", "9月"}, new List<string>() { "10月", "11月", "12月" } }; List<SunburstDataItem> items = new List<SunburstDataItem>(); var yearLen = Math.Max((int)Math.Round(Math.Abs(5 - Instance.rnd.NextDouble() * 10)), 3); int currentYear = DateTime.Now.Year; for (int i = yearLen; i > 0; i--) { years.Add((currentYear - i).ToString()); } var quarterAdded = false; foreach (string y in years) { var i = years.IndexOf(y); var addQuarter = Instance.rnd.NextDouble() > 0.5; if (!quarterAdded && i == years.Count - 1) { addQuarter = true; } var year = new SunburstDataItem() { Year = y }; if (addQuarter) { quarterAdded = true; foreach (List<string> q in times) { var addMonth = Instance.rnd.NextDouble() > 0.5; int idx = times.IndexOf(q); var quar = "Q" + (idx + 1); var quarters = new SunburstDataItem() { Year = y, Quarter = quar }; if (addMonth) { foreach (string m in q) { quarters.Items.Add(new SunburstDataItem() { Year = y, Quarter = quar, Month = m, Value = rnd.Next(20, 30) }); }; } else { quarters.Value = rnd.Next(80, 100); } year.Items.Add(quarters); }; } else { year.Value = rnd.Next(80, 100); } items.Add(year); }; return items; } public static List<FlatDataItem> CreateFlatData() { Random rnd = Instance.rnd; List<string> years = new List<string>(); List<List<string>> times = new List<List<string>>() { new List<string>() { "1月", "2月", "3月"}, new List<string>() { "4月", "5月", "6月"}, new List<string>() { "7月", "8月", "9月"}, new List<string>() { "10月", "11月", "12月" } }; List<FlatDataItem> items = new List<FlatDataItem>(); var yearLen = Math.Max((int)Math.Round(Math.Abs(5 - rnd.NextDouble() * 10)), 3); int currentYear = DateTime.Now.Year; for (int i = yearLen; i > 0; i--) { years.Add((currentYear - i).ToString()); } var quarterAdded = false; foreach (string y in years) { var i = years.IndexOf(y); var addQuarter = rnd.NextDouble() > 0.5; if (!quarterAdded && i == years.Count - 1) { addQuarter = true; } if (addQuarter) { quarterAdded = true; foreach (List<string> q in times) { var addMonth = rnd.NextDouble() > 0.5; int idx = times.IndexOf(q); var quar = "Q" + (idx + 1); if (addMonth) { foreach (string m in q) { items.Add(new FlatDataItem() { Year = y, Quarter = quar, Month = m, Value = rnd.Next(30, 40) }); }; } else { items.Add(new FlatDataItem() { Year = y, Quarter = quar, Value = rnd.Next(80, 100) }); } }; } else { items.Add(new FlatDataItem() { Year = y.ToString(), Value = rnd.Next(80, 100) }); } }; return items; } public class FlatDataItem { public string Year { get; set; } public string Quarter { get; set; } public string Month { get; set; } public double Value { get; set; } } public class SunburstDataItem { List<SunburstDataItem> _items; public string Year { get; set; } public string Quarter { get; set; } public string Month { get; set; } public double Value { get; set; } public List<SunburstDataItem> Items { get { if (_items == null) { _items = new List<SunburstDataItem>(); } return _items; } } } public class Item { public int Year { get; set; } public string Quarter { get; set; } public string MonthName { get; set; } public int MonthValue { get; set; } public double Value { get; set; } } |
レイアウトにSunburstコントロールを追加するには、ソリューションエクスプローラからレイアウトフォルダー内の .axml ファイルを開き、そのコードを以下のコードに置き換えます。
XML |
コードのコピー
|
---|---|
<?xml version="1.0" encoding="utf-8"?> <C1.Android.Chart.Sunburst xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Sunburst" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center"/> |
Sunburst コントロールをツールボックス内の Custom controls タブからデザイナーモードでレイアウト表面にドラッグすることもできます。 次に、レイアウトを初期化するために、次のコードを OnCreate メソッドに追加します。
XML |
コードのコピー
|
---|---|
public class GettingStartedActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); C1Sunburst sunburst = new C1Sunburst(this); sunburst.Binding = "Value"; sunburst.BindingName = "Year,Quarter,Month"; sunburst.ToolTipContent = "{}{name}\n{y}"; sunburst.DataLabel.Position = PieLabelPosition.Center; sunburst.DataLabel.Content = "{}{name}"; sunburst.ItemsSource = DataService.CreateFlatData(); LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MatchParent, LinearLayout.LayoutParams.MatchParent); layout.AddView(sunburst, param); // 「メイン」レイアウトリソースからビューを設定する SetContentView(layout); } } |
F5 を押してアプリケーションを実行します。