上篇已经介绍通用曲线控件源码定制之设计实现,详细描述了通用曲线控件的功能部件及其结构关系,并且实现了核心类的源码,本文由浮云E绘图继续介绍通用曲线控件定制开发的重点和难点,并附完整源码。
一. 曲线控件源码类使用流程
根据上文通用曲线控件源码定制之设计实现篇可知曲线控件结构关系如下:
先创建曲线画布View --> 接着创建曲线数据管理器Chart --> 创建XY坐标轴,设定曲线头Header、脚注FootNote、网格Grid --> 添加对应坐标轴类型对应的曲线Series数据集。
// 作者:浮云绘图,专业定制CAD等图形编辑、曲线控件、报表等工具源码开发
// QQ:316868127
// 1画布ChartView关联容器Chart
public class ChartView extends View{
private AbstractChart _chart;
public ChartView(Context context, AbstractChart chart)
{
super(context);
_chart = chart;
}
private volatile boolean _isDrawing = false;
@Override
protected void onDraw(Canvas canvas) {
_isDrawing = true;
super.onDraw(canvas);
_chart.draw(canvas, _paint);
_isDrawing = false;
}
}
//-----------------------------------------------------------
// 2容器XYChart,支持双X轴和双Y轴
public class XYChart extends AbstractChart {
// private PointD _origin = new PointD(0, 0); //仅XAndY坐标系原点
private RectF _plotArea = new RectF(0,0,0,0);
private int _plotBackColor = Color.argb(255, 230, 230, 230);
private AbstractAxis _axisX;
private AbstractAxis _axisY;
private AbstractAxis _axisX2;
private AbstractAxis _axisY2;
public XYChart(AbstractAxis axisX, AbstractAxis axisY) {
this(axisX, axisY, null, null);
}
public XYChart(AbstractAxis axisX, AbstractAxis axisY,
AbstractAxis axisX2, AbstractAxis axisY2){
_axisX = axisX;
_axisY = axisY;
_axisX2 = axisX2;
_axisY2 = axisY2;
_axisX.setVisible(true);
_axisY.setVisible(true);
_axisX.setType(EnAxisType.X);
_axisY.setType(EnAxisType.Y);
if(axisX2 != null) {
_axisX2.setVisible(true);
_axisX2.setType(EnAxisType.X2);
_axisX2.getGrid().setVisible(false);
}
if(axisY2 != null){
_axisY2.setVisible(true);