C#开发Android移动应用系列之OxyPlot图表应用
By
jerrxjr1220
at 2023-08-17 • 0人收藏 • 483人看过
其实通过上两次的介绍,Xamarin通过路由跳转和数据绑定已经可以完成大部分的工作了。
今天再来分享一下利用OxyPlot在移动端展示图表,这样对于上位机的一些数据展示会非常直观和方便。
OxyPlot画图表
安装OxyPlot库,由于OxyPlot对于Xamarin的Android、IOS和Forms有不同版本,记得选择Xamarin的Forms版本,不然会在渲染的时候报错,别问我是怎么知道的

在视图模型中,创建一个PlotModel对象并设置图表的类型和数据
using OxyPlot;
using OxyPlot.Legends;
using OxyPlot.Series;
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace XamarinApp01
{
public class MyViewModel : INotifyPropertyChanged
{
private PlotModel plotModel;
public PlotModel PlotModel
{
get { return plotModel; }
set
{
plotModel = value;
OnPropertyChanged(nameof(PlotModel));
}
}
public MyViewModel()
{
PlotModel = new PlotModel { Title = "My Chart" };
// 创建一个折线图的数据系列
var series = new LineSeries
{
Title = "Series 1",
Color = OxyColors.Blue,
StrokeThickness = 2
};
// 添加图表的数据点
series.Points.Add(new DataPoint(1, 2));
series.Points.Add(new DataPoint(2, 3));
series.Points.Add(new DataPoint(3, 1));
series.Points.Add(new DataPoint(4, 4));
series.Points.Add(new DataPoint(5, 2));
// 将数据系列添加到图表模型中
PlotModel.Series.Add(series);
// 创建一个折线图的数据系列
var series2 = new LineSeries
{
Title = "Series 2",
Color = OxyColors.Red,
StrokeThickness = 2,
LineStyle = LineStyle.LongDash
};
// 添加图表的数据点
series2.Points.Add(new DataPoint(1, 3));
series2.Points.Add(new DataPoint(2, 4));
series2.Points.Add(new DataPoint(3, 2));
series2.Points.Add(new DataPoint(4, 3));
series2.Points.Add(new DataPoint(5, 1));
// 将数据系列添加到图表模型中
PlotModel.Series.Add(series2);
// 设置图列显示
PlotModel.Legends.Add(new Legend());
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}3. 将视图模型绑定到内容页上
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using OxyPlot;
using OxyPlot.Series;
namespace XamarinApp01
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
BindingContext = new MyViewModel();
}
}
}4. 在想要展示图表的内容页(ContentPage)中,添加一个PlotView控件
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:oxy="clr-namespace:OxyPlot.Xamarin.Forms;assembly=OxyPlot.Xamarin.Forms"
x:Class="XamarinApp01.MainPage">
<StackLayout>
<Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
<Label Text="Welcome to Xamarin.Forms!" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
</Frame>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="500"></RowDefinition>
</Grid.RowDefinitions>
<oxy:PlotView Model="{Binding PlotModel}" />
</Grid>
</StackLayout>
</ContentPage>5. 在Xamarin中使用OxyPlot时,OxyPlot需要一个特定的处理器用于绑定。在Android项目中,可以在MainActivity.cs文件中的OnCreate方法中加入初始化方法。
这步一定要加,不然加载时会报初始化失败的错误。
using System;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;
namespace XamarinApp01.Droid
{
[Activity(Label = "XamarinApp01", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
OxyPlot.Xamarin.Forms.Platform.Android.PlotViewRenderer.Init();
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
2 个回复 | 最后更新于 2023-08-17
登录后方可回帖
实际安装到手机上还要注意Android的版本与手机版本是否适配