android自定义条形图

直接先上图看效果

private int wx;
private int QQ;
private int x = 100;
Point pa = new Point(10, 10);
Point pb = new Point(20, 40);
Point po = new Point();
private String[] kedu = {"0  -", "1000  -", "2000  -", "3000  -", "4000  -", "5000  -", "6000  -"};
private String[] lie = {"微信官方", "支付宝官方", "花呗分期", "网商银行", "平安银行", "第三方", "pos机刷卡"};

public Music(Context context) {
    super(context);
    MainActivity.set();
    Log.e("11111", MainActivity.set());
}

public Music(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
}

public Music(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

}
//这个方法用来传递条形图参数
public void setX(int wx, int QQ) {
    this.wx = wx;
    this.QQ = QQ;

}


@Override
protected void onDraw(Canvas canvas) {
    Log.e("11111", wx + QQ + "");
    int width = (getWidth() / 10);
    int height = getHeight() / 3;
    Log.e("eeeeeeeee", getWidth() + "``" + getHeight() + "--" + width + "--" + height);
    Paint paint1 = new Paint();
    paint1.setColor(Color.RED);
    paint1.setTextSize(20);

    Paint paint = new Paint();
    paint.setColor(Color.BLACK);

    // 画坐标轴
    if (canvas != null) {
        canvas.drawColor(Color.WHITE);
        // 画直线
        canvas.drawLine(width / 2 + 50, 300, width * 8 + width / 2 + 50, 300, paint);
        canvas.drawLine(width / 2 + 50, 300, width / 2 + 50, 20, paint);
        // 画X轴箭头
        int x = width * 8 + width / 2 + 50, y = 300;
        drawTriangle(canvas, new Point(x, y), new Point(x - 10, y - 5),
                new Point(x - 10, y + 5));
        canvas.drawText("X", x - 15, y + 18, paint);
        // 画Y轴箭头
        x = width / 2 + 50;
        y = 20;
        drawTriangle(canvas, new Point(x, y), new Point(x - 5, y + 10),
                new Point(x + 5, y + 10));
        canvas.drawText("Y", x + 12, y + 15, paint);
        // 画中心点坐标
        // 先计算出来当前中心点坐标的值
        // String centerString = "(" + (centerX - po.x) / 2 + ","
        //  + (po.y - centerY) / 2 + ")";
        // 然后显示坐标
        //canvas.drawText(centerString, centerX - 25, centerY + 15, paint);
    }

    if (canvas != null) {
        /*
         * TODO 画数据 所有外部需要在坐标轴上画的数据,都在这里进行绘制
         */
        canvas.drawCircle(po.x + 2 * pa.x, po.y - 2 * pa.y, 2, paint);
        canvas.drawCircle(po.x + 2 * pb.x, po.y - 2 * pb.y, 2, paint);
        canvas.drawLine(po.x + 2 * pa.x, po.y - 2 * pa.y, po.x + 2 * pb.x,
                po.y - 2 * pb.y, paint);
        //画条形图
        for (int i = 0; i < 7; i++) {
            height = (int) (Math.random() * 300);
            canvas.drawRect(
                    (float) (90 + width * i + width / 2),
                    height,
                    (float) (width * (i + 1) + width / 2 + 50),
                    300, paint1
            );
            if (i == 5) {
                canvas.drawText(lie[i], (float) (90 + width * i + width / 2 + (width - paint1.measureText(lie[i]) - 40) / 2), 340, paint1);
            }
            canvas.drawText(lie[i], (float) (90 + width * i + width / 2 + (width - paint1.measureText(lie[i]) - 40) / 2), 340, paint1);
            String data = "$" + height + "";
            canvas.drawText(data, (float) (90 + width * i + width / 2 + (width - paint1.measureText(data) - 40) / 2), height - 10, paint1);
        }
        //画刻度
        for (int j = 0; j < 7; j++) {
            if (j == 0) {
                canvas.drawText("0", width / 2 - paint.measureText(kedu[j]) + 6 + 50, 300 - j * 40 + 5, paint);
            } else {
                canvas.drawText(kedu[j], width / 2 - paint.measureText(kedu[j]) + 6 + 50, 300 - j * 40 + 5, paint);
            }
        }
        // canvas.drawPoint(pa.x+po.x, po.y-pa.y, paint);
    }

}

/**
 * 画三角形 用于画坐标轴的箭头
 */
private void drawTriangle(Canvas canvas, Point p1, Point p2, Point p3) {
    Path path = new Path();
    path.moveTo(p1.x, p1.y);
    path.lineTo(p2.x, p2.y);
    path.lineTo(p3.x, p3.y);
    path.close();

    Paint paint = new Paint();
    paint.setColor(Color.BLACK);
    paint.setStyle(Paint.Style.FILL);
    // 绘制这个多边形
    canvas.drawPath(path, paint);
}
个人偷懒原因,文字和刻度需要自己微调

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值