首先需要看图片,看过图片的才有发言权。
效果就是这样的,画的效果还是不错的,能用的请收藏。
首先,画折现统计图,画折线统计图的的代码如下。
public class TestLineChartView extends View {
private boolean noTitle;
private float marginLeft;// 左边距
private float marginRight;// 右边距
private float marginTop;// 上边距
private float marginBottom;//下边距
private float widthInterval;// 单位宽
private float heightInterval;// 单位高
private float viewHeight = 0;// 控件高度
private float viewWidth = 0;// 控件宽度
private List<Double> values;// 折线值
private List<String> dates;// 日期
private List<String> stringValues = new ArrayList<String>();//折线值String
private double maxV;// 最大值
private double minV;// 最小值
private float valueInterval;// 每格像素的value值
private List<String> numbers;// 纵坐标
private int pointNum = 0;// 选中的是哪一个点
private float textSize = 0;// 字体大小
private float titleSize;
private float xSize;
private float ySize;
private int fillCircleRadio = 14;// 实心圆的半径
private int strokeCircleRadio = 16;//空心圆半径
private int lineSize = 10;
private int fillPointSize = 5;//实心圆
private int strokePointSize = 10;//空心圆粗细
private TextPaint FontPaint;
private Context mContext;
// 构造方法
public TestLineChartView(Context context) {
this(context, null, 0);
this.mContext = context;
}
public TestLineChartView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
this.mContext = context;
}
public TestLineChartView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext = context;
}
/**
* 设置折线的值
*
* @param values 折线值
* @param dates 日期(七天)
*/
public void setData(List<Double> values, List<String> dates, boolean noTitle) {
if (values == null || values.size() == 0 || dates == null || dates.size() == 0) {
return;
}
// 保存传入的参数
this.values = values;
this.dates = dates;
this.noTitle = noTitle;
reInitData();
// 重绘
this.invalidate();
}
// 设置字体大小
public void setTextSize(int textSize, int titleSize, int xSize, int ySize) {
this.textSize = textSize;
this.titleSize = titleSize;
this.xSize = xSize;
this.ySize = ySize;
}
@Override
protected void onDraw(Canvas canvas) {
clearCanvas(canvas);// 清空画布
if (values == null || values.size() == 0 || dates == null || dates.size() == 0) {
return;
}
initData();
if (!noTitle) {
drawTitle(canvas);// 画"近七天收益趋势"
} else {
marginTop = marginBottom;
}
drewTable(can