自定义View简单折线图

来源:互联网 发布:it狂人第三季 编辑:程序博客网 时间:2024/05/29 09:26

主要的类

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import android.view.View;/** * Created by Administrator on 2017/1/18. */public class LineChart extends View {    private String[] XLabel={"1-14","1-15","1-16","1-17","1-18","1-19"};//X轴的刻度    private String[] YLabel={"","10","20","30","40","50"};//Y轴的刻度    private int[] datas={5,20,15,10,30,23};//数据    private int XPoint=50; //原点X轴坐标    private int YPoint=700; //原点Y轴坐标    private int XLength=600;//X轴长度    private int YLength=600;//Y轴长度    private int XScale=100;//X轴刻度的宽度    private int YScale=100;//Y轴刻度的宽度    public LineChart(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Paint paint = new Paint();        Paint circlePaint = new Paint();        paint.setColor(Color.RED);        circlePaint.setColor(Color.BLUE);        paint.setAntiAlias(true);        canvas.drawLine(XPoint,YPoint,XPoint+XLength,YPoint,paint);//X轴        canvas.drawLine(XPoint,YPoint,XPoint,YPoint-YLength,paint);//Y轴        //绘制箭头        canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-6,YPoint-6,paint);//X箭头        canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-6,YPoint+6,paint);        canvas.drawLine(XPoint,YPoint-YLength,XPoint-6,YPoint-YLength+6,paint);//Y箭头        canvas.drawLine(XPoint,YPoint-YLength,XPoint+6,YPoint-YLength+6,paint);        //绘制Y轴刻度        for (int i=0;i*YScale<YLength;i++){            canvas.drawLine(XPoint,YPoint-i*YScale,XPoint+5,YPoint-i*YScale,paint);            canvas.drawText(YLabel[i],XPoint-20,YPoint-i*YScale+5,paint);        }        //绘制X轴刻度        for (int i=0;i*XScale<XLength;i++){            canvas.drawLine(XPoint+i*XScale,YPoint,XPoint+i*XScale,YPoint-5,paint);            canvas.drawText(XLabel[i],XPoint+i*XScale-10,YPoint+20,paint);            //画折线            if(i<datas.length-1)            canvas.drawLine(XPoint+i*XScale,YCoord(datas[i]),XPoint+(i+1)*XScale,YCoord(datas[i+1]),paint);            canvas.drawCircle(XPoint+i*XScale,YCoord(datas[i]),4,circlePaint);//每个数据对应的Y坐标        }    }    /**     * 计算数据对应的Y坐标     * @param data     * @return     */    private int YCoord(int data) {        Log.i("打印数据",YPoint-data*YScale/Integer.parseInt(YLabel[1])+"");        return YPoint-data*YScale/Integer.parseInt(YLabel[1]);    }}

效果预览图

这里写图片描述

0 0
原创粉丝点击