web 前端绘制折线_web前端开发之路——Android 自定义控件(天气趋势折线图)

这篇博客详细介绍了如何在Android中自定义控件来绘制天气趋势的折线图。通过计算最大值和最小值,设置画笔宽度,并根据元素数量计算每个点的坐标,最终使用Canvas进行线条和圆点的绘制,展示温度变化。
摘要由CSDN通过智能技术生成

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

if (mElements == null || mElements.size() == 0) {

return;

}

double max_up = getMaxUp();

double min_down = getMinDown();

canvas.setDrawFilter(mDrawFilter);

mPaint.setStrokeWidth(lineWeith);

float width = getWidth();

float grap = width / mElements.size();

float textSize = mTextPaint.getTextSize();

int textMargin = circleRadius * 2;

float margin_top = textSize + 2 * textMargin;

Log.d(TAG, "onDraw: " + margin_top + "|" + textSize);

float height = getHeight() - 2 * margin_top;

for (int i = 0; i < mElements.size() - 1; i++) {

float startX = i * grap + grap / 2;

float stopX = (i + 1) * grap + grap / 2;

float startY = (float) (max_up - mElements.get(i).getUp()) / (float) (max_up -

min_down) * height + margin_top;

float stopY = (float) (max_up - mElements.get(i + 1).getUp()) / (float) (max_up -

min_down) * height + margin_top;

canvas.drawText((int) mElements.get(i).getUp() + "℃", startX - textSize, startY -

textMargin, mTextPaint);

canvas.drawCircle(startX, startY, circleRadius, mPaint);

canvas.drawLine(startX, startY, stopX, stopY, mPaint);

if (i == mElements.size() - 2) {

canvas.drawText((int) mElements.get(i + 1).getUp() + "℃", stopX - textSize, stopY

- textMargin, mTextPaint);

canvas.drawCircle(stopX, stopY, circleRadius, mPaint);

}

startY = (float) (max_up - mElements.get(i).getDown()) / (float) (max_up - min_down) *

height + margin_top;

stopY = (float) (max_up - mElements.get(i + 1).getDown()) / (float) (max_up -

min_down) * height + margin_top;

canvas.drawText((int) mElements.get(i).getDown() + "℃", startX - textSize, startY +

textSize + textMargin, mTextPaint);

canvas.drawCircle(startX, startY, circleRadius, mPaint);

canvas.drawLine(startX, startY, stopX, stopY, mPaint);

if (i == mElements.size() - 2) {

canvas.drawText((int) mElements.get(i + 1).getDown() + "℃", stopX - textSize,

stopY + textSize + textMargin, mTextPaint);

canvas.drawCircle(stopX, stopY, circleRadius, mPaint);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值