MPAndroidChart对Y轴上的刻度宽度的设置以及其他说明

来源:互联网 发布:python 调用批处理 编辑:程序博客网 时间:2024/06/16 22:58

今天发现官方接口有更方便的解决方案

mChart.setViewPortOffsets(left, top, right, bottom),设置这个方法后,四个方向的偏移就不会进行动态计算了(不设置的话,会根据动态计算出的labels值进行计算宽度或高度,来设置labels占用的宽度(y轴上labels)或高度(x轴上数据)),固定为这里设置的值(px 像素值)



    Chart中关于LineChart的说明(因为我只在LineChart上做了实验,相比其他的形状的图像类似):
setViewPortOffsets(final float left, final float top,final float right, final float bottom)       这里的单位是px
参数left是指左侧y轴上刻度值占用的宽度,top指上面的x轴线(如果有的话)刻度所占用的高度(如果没有刻度值,则图上放的空白距离会增加这个距离),right是指右侧y轴刻度值宽度,如果没有右侧y轴,则图的右边界距离会增加right距离;bottom是指下面的x轴的刻度值宽度,如果没有下边的x轴,则图下方的空白距离会增加bottom的距离

以下图为例,最外层的黑色矩形区域就是指绘制的图片所在的区域,这里不考虑padding,margin设置,只考虑绘图时使用的偏移。
  setViewPortOffsets中的参数left就是指2处矩形框的宽度
   此轴线对象可以设置刻度值距离轴线的距离,即leftAxis.setXOffset(20f);中的20f(单位是dp)就是指3处的空隙宽度
   setExtraOffsets(float left, float top, float right, float bottom);单位是dp,left是指1处空隙的宽度,其他参数分别是图片距离上右下留的空白





---------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------


在使用MPAndroidChart绘制曲线图的时候,如果数据是动态加载的,那么y轴上的刻度值会根据计算出来的数值进行动态显示,从而会造成在数据动态添加的过程中,由于数据的位数可能会变大,就会使y轴线刻度值宽度变大,那么整个图也就跟着变化。如何做到 y轴上的刻度值宽度总是固定不变,以至于使Y轴线固定在某个位置不会变化呢?下面提出一种解决方案


在MPAndroidChart的源文件中找到ViewPortHandler类

添加成员

 private int mMaxOffsetLeft = 0;

对应的使用接口为

 public void setMaxOffsetLeft(int offsetLeft) {        mMaxOffsetLeft = offsetLeft;    }

原有的restrainViewPort方法修改成如下

   

public void restrainViewPort(float offsetLeft, float offsetTop, float offsetRight,                                 float offsetBottom) {        if (mMaxOffsetLeft != 0) {            offsetLeft = mMaxOffsetLeft;        }        mContentRect.set(offsetLeft, offsetTop, mChartWidth - offsetRight, mChartHeight                - offsetBottom);    }


使用方法为

mChart.getViewPortHandler().setMaxOffsetLeft(150);


当然,上述的方法,只是解决一个偏移量的设定,而其他方向上的偏移量仍然根据计算动态改变。当然也可以类似于上面的做法进行解决。

原创粉丝点击