AndroidCharts 是一款轻量级的图表显示控件,对比起Android-Charts和AChartEngine来说简单和活泼了很多,适合数据展示不需要太过详细专业的场合,它支持简单且带动画的折线图,柱状图和饼状图。
其中的linechart不支持y坐标显示,我们可以自己修改添加上去,修改后类LineView的代码如下,其中YCOORD_TEXT_LEFT_MARGIN为图标向右的偏移量,用来空出y坐标文字的空间:
package com.nekocode.xuedao.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.NinePatchDrawable;
import android.util.AttributeSet;
import android.view.View;
import java.util.ArrayList;
import com.nekocode.xuedao.R;
/**
* Created by Dacer on 11/4/13.
*/
public class LineView extends View {
private int mViewHeight;
//drawBackground
private boolean autoSetDataOfGird = true;
private boolean autoSetGridWidth = true;
private int dataOfAGird = 10;
private int bottomTextHeight = 0;
private ArrayList<String> bottomTextList;
private ArrayList<Integer> dataList;
private ArrayList<Integer> xCoordinateList = new ArrayList<Integer>();
private ArrayList<Integer> yCoordinateList = new ArrayList<Integer>();
private ArrayList<Dot> drawDotList = new ArrayList<Dot>();;
private Paint bottomTextPaint = new Paint();
private Paint ycoordTextPaint = new Paint();
private int bottomTextDescent;
//popup
private Paint popupTextPaint = new Paint();
private final int bottomTriangleHeight = 12;
//private Dot selectedDot;
private boolean mShowYCoordinate = true;
private int topLineLength = MyUtils.dip2px(getContext(), 12);; // | | 鈫this
//-+-+-
private int sideLineLength = MyUtils.dip2px(getContext(),45)/3*2;// --+--+--+--+--+--+--
// 鈫this 鈫
private int backgroundGridWidth = MyUtils.dip2px(getContext(),45);
//Constants
private final int popupTopPadding = MyUtils.dip2px(getContext(),2);
private final int popupBottomMargin = MyUtils.dip2px(getContext(),5);
private final int bottomTextTopMargin = MyUtils.sp2px(getContext(),5);
private final int bottomLineLength = MyUtils.sp2px(getContext(), 22);
private final int DOT_INNER_CIR_RADIUS = MyUtils.dip2px(getContext(), 2);
private final int DOT_OUTER_CIR_RADIUS = MyUtils.dip2px(getContext(),5);
private final int MIN_TOP_LINE_LENGTH = MyUtils.dip2px(getContext(),12);
private final int MIN_VERTICAL_GRID_NUM = 4;
private final int MIN_HORIZONTAL_GRID_NUM = 1;
private final int BACKGROUND_LINE_COLOR = Color.parseColor("#EEEEEE");
private final int BOTTOM_TEXT_COLOR = Color.parseColor("#9B9A9B");
private final int YCOORD_TEXT_LEFT_MARGIN = MyUtils.dip2px(getContext(), 10);
class YCoordData {
private int y;
private int data;
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
private Runnable animator = new Runnable() {
@Override
public void run() {
boolean needNewFrame = false;
for(Dot dot : drawDotLis