1:MPAndroidChart github地址:https://github.com/PhilJay/MPAndroidChart
要用图表的控件,就在github上找了一下,感觉MPAndroidChart 好看点。。。其他的个人觉得美观角度上,我不能接受。其实 MPAndroidChart......也不好看。。。
我需要用到画参考线。。但是没找到方法(或许有,我没找到) 只好自己添加这个方法,先看效果
5,10附近就是添加了两条血糖正常值参考线(绿色虚线)
额,给还没找到添加位置的同学。。。提示一下。。
1.先添加相关方法,属性
在BarLineChartBase类中添加以下代码
//以下是添加的画参考线
private boolean isDrawRefYLine=false;//是否画参考线
public void setDrawRefYLine(boolean isDrawRefYLine) {
this.isDrawRefYLine = isDrawRefYLine;
}
private float[] rYs;//y参考值
private int[] ryColors;//参考线的颜色
public void setRef(float[] values,int[] colors){
rYs=values;
ryColors=colors;
}
//画横坐标参考线
private void darwRefYLine(){
if(rYs==null||rYs.length<=0) return;
//保存paint初始参数
int initColor=mGridPaint.getColor();
float initWidth=mGridPaint.getStrokeWidth();
PathEffect initPe=mGridPaint.getPathEffect();
mGridPaint.setStrokeWidth(4f);
PathEffect effects = new DashPathEffect(new float[] { 8, 8}, 1);
mGridPaint.setPathEffect(effects);
int len=rYs.length;
if(ryColors==null||ryColors.length<2){
ryColors=new int[]{Color.RED,Color.RED};
}
int colLen=ryColors.length;
float[] position = new float[2];
//获取最大最小值
float min=mYLabels.mEntries[0];
float max=mYLabels.mEntries[mYLabels.mEntries.length-1];
for(int i=0;i<len;i++){
position[1] = rYs[i];
if(position[1]>=min&&position[1]<=max){//在最大最小值间才画
mTrans.pointValuesToPixel(position);
mGridPaint.setColor(ryColors[i%colLen]);
mDrawCanvas.drawLine(mOffsetLeft, position[1], getWidth() - mOffsetRight, position[1],
mGridPaint);
}
}
//还原
mGridPaint.setColor(initColor);
mGridPaint.setStrokeWidth(initWidth);
mGridPaint.setPathEffect(initPe);
}
2最后画网格线中添加上述的代码的调用
protected void drawHorizontalGrid() {
//。。。。省略
//画参考线
if(isDrawRefYLine){
darwRefYLine();
}
}
//使用
int[] colors=new int[]{XtHpler.COLOR_GREEN,XtHpler.COLOR_GREEN};
chart.setRef(new float[]{4.4f,6.9f},colors);
chart.setDrawRefYLine(true);//启用