Android图表控件MPAndroidChart——LineChart实现 XY轴、原点线的直尺刻度样式

接上文:

Android图表控件MPAndroidChart——曲线图LineChart的使用(多条曲线)

其他相关文章:

Android图表控件MPAndroidChart的简单介绍(MPAndroidChart3.0)

Android图表控件MPAndroidChart——曲线图LineChart的使用(多条曲线)

Android图表控件MPAndroidChart——曲线图LineChart(多条曲线)动态添加数据

Android图表控件MPAndroidChart——柱状图BarChart的使用(多条柱状图)

Android图表控件MPAndroidChart——曲线图+柱状图 CombinedChart的使用 

Android图表控件MPAndroidChart——源码修改实现曲线图X轴直尺刻度样式

MPAndroidChart在github上的地址:https://github.com/PhilJay/MPAndroidChart

没想到现在更新文章,日期也更新为当前时间了。

一. 目标效果

对比两张图

     

左图为需要实现的效果,右图为当前的效果,对比X Y轴,当前的图表未展示刻度,而且X轴在0的下方。

总结需要实现的功能

  • X Y轴展示刻度
  • X轴位置从原点(0,0)开始 

二. 实现效果

因未找到相关方法设置显示类似直尺样式的刻度(若有相关方法可实现,请告诉我一下),所以只有修改下源码

修改源码之前首先自己在View中画出刻度,然后找到MPAndroidChart库X轴的绘制代码,将自己写的方法添加进去。

注:本文会将长短刻度线都绘制出来,不想要短刻度线,去掉绘制方法即可。绘制效果如下:

2.1 绘制刻度线
2.1.1 绘制方式

绘制刻度线有很多方式,在此简单说一下本文中使用的方式。

先画一条长竖线(长刻度线),然后平移画布一段距离(即刻度线间的间距),在画短刻度线(坐标轴未变,只是画布位置变了,至使表面上看起来线位置变了)

2.1.2 画线

手机坐标轴:

画刻度线:

新建MyScaleView 重写 onDraw()方法

public class MyScaleView extends View {
    private Paint scalePaint;
    public MyScaleView(Context context) {
        this(context, null);
    }
    public MyScaleView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public MyScaleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaint();
    }
    private void initPaint() {
        scalePaint = new Paint();
        scalePaint.setAntiAlias(true);
        scalePaint.setColor(Color.RED);
        scalePaint.setStrokeWidth(2);
        scalePaint.setStyle(Paint.Style.FILL);
        scalePaint.setDither(true);
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawScale(canvas);
    }
    private void drawScale(Canvas canvas) {
        int scaleGroup = 5;     // 默认1个长刻度间隔4个短刻度,加起来一组5
        int mScaleCount = 101;  //刻度的总个数
        canvas.save();
        int startX = 30;
        int startY = 500;   //即在坐标轴(30,500)处开始画刻度线
        for (int i = 0; i < mScaleCount; i++) {
            canvas.save();  //记录画布状态
            canvas.translate(10 * i, 0);    //画布平移,即刻度线的间距
            if (i == 0 || i % scaleGroup == 0) {
                canvas.drawLine(startX, startY, startX, startY - 20, scalePaint);//画长刻度线
            } else {
                canvas.drawLine(startX, startY, startX, startY - 10, scalePaint);//画短刻度线
            }
            canvas.restore();//取出保存的状态
        }
        canvas.restore();
    }
}

最后应用MyScaleView 效果如下

2.2 修改源码

步骤2.1.2中已经在实现了刻度线的绘制,现在只需要将绘制代码,加入MPAndroidChart中即可实现效果

2.2.1 下载源码

下载源码:https://github.com/PhilJay/MPAndroidChart/releases

点击 Downloads Source code(zip) 我下载的版本为v3.0.3  解压后里面的MPChartLib即为MPAndroidChart库源码

2.2.2 寻找X Y轴的绘制类

说下我的思路

首先找到 X轴  XAxis   并没有什么相关绘制代码

接着找到父类  AxisBase  发现 X Y 轴都继承于该类,那肯定和这类相关了

然后发现 AxisBase 类下定义了 相关属性 和 绘制图形相关

  • 13
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值