自定义View简单折线图

主要的类

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值