package com.example.linchartdemo.view;
import java.util.List;
import android.R.color;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
public class ZXView extends View {
private List<Integer> xlist;// X坐标标签
private List<Integer> ylist;// Y坐标标签
private List<Integer> params;// 参数集合
private Paint paint;
private Paint paintLines;
private Paint paintArc;
private Paint paintText;
private int textsize = 20;
private float Xoffset = 0;// X轴偏移或叫间隔
private float Yoffset = 0;// Y轴偏移或叫间隔
public float XSpac = 50;
public float Xspac = 50;
public float YSpac = 50;
public float rightXspac = 50;
public float rightYspac = 50;
public float circleRadius = 10;
private float lastX = -1;
private float lastY = -1;
public ZXView(Context context, List<Integer> xlists, List<Integer> ylists,
List<Integer> paramss) {
super(context);
xlist = xlists;
ylist = ylists;
params = paramss;
initWidget();
}
public ZXView(Context context, AttributeSet attrs) {
super(context, attrs);
initWidget();
}
public ZXView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initWidget();
}
public void initViewData(List<Integer> xlists, List<Integer> ylists,
List<Integer> paramss) {
xlist = xlists;
ylist = ylists;
params = paramss;
}
@Override
protected void onDraw(Canvas canvas) {
drawXY(canvas);
drawLine(canvas);
super.onDraw(canvas);
}
public void updataUI() {
invalidate();
}
/**
* 画折线
*
* @param canvas
*/
private void drawLine(Canvas canvas) {
Xoffset = ((getWidth()) - 20) / (xlist.size());
Yoffset = (getHeight()) / (ylist.size());
Log.i("texts", "X=" + Xoffset + "Y=" + Yoffset);
float rulerOffset = 0;
if (xlist.size() < 2)
throw new IllegalArgumentException("the params argument is <2");
else
rulerOffset = (xlist.get(1) - xlist.get(0));
if (params == null && params.size() <= 0)
throw new IllegalArgumentException("the params is null or 0");
// Paint p = new Paint();
// p.setAntiAlias(true);
// p.setTextSize(25);
// p.setColor(Color.WHITE);
// canvas.drawText("KW", 10 + Xoffset, 20, p);
for (int i = 0; i < params.size(); i++) {
int param = params.get(i);
float histigramHight = param * (Yoffset / rulerOffset);
float currentX = (Xoffset * i + Xspac + 5);
float currentY = (getHeight() - YSpac - histigramHight);
canvas.drawCircle(currentX, currentY, circleRadius, paintArc);
if (lastX != -1) {
canvas.drawLine(lastX, lastY, currentX, currentY, paintLines);
}
lastX = currentX;
lastY = currentY;
}
// 重置lastX跟Y
lastX = -1;
lastY = -1;
}
/**
* 画坐标轴
*
* @param canvas
*/
private void drawXY(Canvas canvas) {
canvas.drawLine(XSpac, 0, XSpac, getHeight() - 5 - XSpac, paint);// x
canvas.drawLine(XSpac, getHeight() - XSpac, getWidth(), getHeight()
- XSpac, paint);// y
canvas.drawLine(getWidth(), 0, getWidth() - 1, getWidth() - YSpac,
paint);// 右边Y
float yoffset = getHeight() / ylist.size();
float xoffset = (getWidth() - XSpac) / xlist.size();
// 画字
for (int i = 0; i < ylist.size(); i++) {
canvas.drawText(ylist.get(i) + "", 0, getHeight() - yoffset * i
- YSpac, paintText);
}
for (int i = 0; i < xlist.size(); i++) {
canvas.drawText(xlist.get(i) + "", XSpac + xoffset * i, getHeight()
- YSpac + textsize, paintText);
}
// for (int i = 0; i < ylist.size(); i++) {
// for (int j = 0; j < 50; j++) {
// canvas.drawLine(XSpac + j * 303, yoffset * i - YSpac, XSpac + j
// * 30 + 20, yoffset * i - YSpac, paint);
// }
// }
}
/**
* 初始化画笔
*/
private void initWidget() {
paint = new Paint();
paint.setColor(Color.parseColor("#999999"));
paint.setTypeface(Typeface.DEFAULT);
paint.setAntiAlias(true);
paint.setStrokeWidth(2);
paintLines = new Paint();
paintLines.setColor(Color.parseColor("#00B4EA"));
paintLines.setTypeface(Typeface.DEFAULT);
paintLines.setAntiAlias(true);
paintLines.setStrokeWidth(3);
paintArc = new Paint();
paintArc.setColor(Color.parseColor("#EBEEEF"));
paintArc.setTypeface(Typeface.DEFAULT);
paintArc.setAntiAlias(true);
paintArc.setStrokeWidth(2);
paintText = new Paint();
// paintText.setColor(Color.parseColor("#ffffff"));
paintText.setTypeface(Typeface.DEFAULT);
paintText.setAntiAlias(true);
paintText.setStrokeWidth(2);
paintText.setTextSize(textsize);
}
}