studio简易折线图

Android Studio简易折线图

先进行dp和px的转换

public static int getDptoPx(Context context, int dpValue) {
    float density = context.getResources().getDisplayMetrics().density;
    int pxValue = (int) (dpValue * density + 0.5);
    return pxValue;
}

然后再进行px和dp的转换

public static int getPxtoDp(Context context, int pxValue) {
    float density = context.getResources().getDisplayMetrics().density;
    int dpValue = (int) (pxValue / density + 0.5);
    return dpValue;
}

然后再进行设置MyLineView

private int width;//宽
private int height;//高
private Paint linePaint;//线条画笔
private Paint textPaint;//横坐标画笔
private Paint pointPaint;//点的坐标
private Context context;

public MyLineView(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    init();
}

private void init() {
    //画笔X轴
    linePaint = new Paint();
    //设置画笔样式
    linePaint.setStyle(Paint.Style.FILL);
    //设置画笔颜色
    linePaint.setColor(Color.RED);
    //设置抗锯齿
    linePaint.setAntiAlias(true);
    linePaint.setStrokeWidth((float) 2.0);

    //文字画笔
    textPaint = new Paint();
    //设置画笔样式
    textPaint.setStyle(Paint.Style.FILL);
    //设置画笔颜色
    textPaint.setColor(Color.RED);
    //设置抗锯齿
    textPaint.setAntiAlias(true);
    //设置文字大小
    textPaint.setTextSize(ScreenUtils.getDptoPx(context, 10));

    //文字画笔
    pointPaint = new Paint();
    //设置画笔样式
    textPaint.setStyle(Paint.Style.FILL);
    //设置画笔颜色
    textPaint.setColor(Color.RED);
    //设置抗锯齿
    textPaint.setAntiAlias(true);
    //设置文字大小
    textPaint.setTextSize(ScreenUtils.getDptoPx(context, 20));
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    //测量宽高
    width = MeasureSpec.getSize(widthMeasureSpec);
    height = MeasureSpec.getSize(heightMeasureSpec);
    //设置测量尺寸
    setMeasuredDimension(width, height);
}

//定义一个二维数组
protected float[][] points = new float[][]{{1, 10}, {2, 47}, {3, 11}, {4, 38}, {5, 9}, {6, 52}, {7, 14}, {8, 37}, {9, 29}, {10, 31}};

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //平移坐标原点
    canvas.translate(50, height - 50);

    //有多少条数据,就把X轴分成多少份
    drawLineXAxis(canvas);
    drawLineYAxis(canvas);
    drawLinePoints(canvas);
}

float pointX = 0;
float pointY = 0;

//画线点
private void drawLinePoints(Canvas canvas) {
    float pointXTemp = 0;
    float pointYTemp = 0;

    for (int i = 0; i < points.length; i++) {
        float temp = points[i][0] % points.length;

        if (temp == 0) {
            pointX = 0 + (points[i][0]) * ((width - 100) / points.length);
        } else {
            pointX = 0 + (points[i][0] % points.length) * ((width - 100) / points.length);
        }

        pointY = 0 - (points[i][1] / 60) * ((height - 100));
        //画圆点
        canvas.drawCircle(pointX, pointY, 5, pointPaint);
        canvas.drawText(i + 1 + "", pointX - 10, pointY - 10, pointPaint);
        canvas.drawText("(" + ((int) points[i][0] + "," + (int) points[i][1]) + ")", pointX - 20, pointY - 20, textPaint);

        if (i != 0) {
            canvas.drawLine(pointXTemp, pointYTemp, pointX, pointY, linePaint);
        }
        pointXTemp = pointX;
        pointYTemp = pointY;
    }
}

//画线Y轴
private void drawLineYAxis(Canvas canvas) {
    int startX = 0;
    int startY = 0;
    int spaceing = (height - 100) / points.length;

    //每次画一小段
    for (int i = 0; (startY + spaceing * i) < height - 50; i++) {
        //画线
        canvas.drawLine(startX, startY, startX, startY - spaceing * i, linePaint);
        //画圆点
        canvas.drawCircle(startX, startY - spaceing * i, 5, linePaint);
        //绘制文本
        canvas.drawText(6 * i + "", startX - 30, startY - spaceing * i, textPaint);
    }
}

//画线X轴
private void drawLineXAxis(Canvas canvas) {
    int startX = 0;
    int startY = 0;
    int spaceing = (width - 100) / points.length;

    //每次画一小段
    for (int i = 0; (startX + spaceing * i) < width - 50; i++) {
        //画线
        canvas.drawLine(startX, startY, startX + spaceing * i, startY, linePaint);
        //画圆点
        canvas.drawCircle(startX + spaceing * i, startY, 5, linePaint);
        //绘制文本
        canvas.drawText(i + 0 + "", startX + spaceing * i, startY + 30, textPaint);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值