package com.liyu.fakeweather.widgets;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
import com.liyu.fakeweather.R;
import com.liyu.fakeweather.utils.SizeUtils;
import java.util.List;
/**
* Created by liyu on 2016/12/8.
*/
public class ChartView extends View {
private Paint paint;
private List<Integer> minTemp;
private List<Integer> maxTemp;
private int minValue = 0;
private int maxValue = 0;
public ChartView(Context context) {
this(context, null);
}
public ChartView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ChartView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint = new Paint();
paint.setColor(context.getResources().getColor(R.color.colorTextDark2nd));
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setTextSize(SizeUtils.sp2px(context, 10));
}
@Override
protected void onDraw(Canvas canvas) {
float width = getWidth();
float height = getHeight();
Path minPath = new Path();
Path maxPath = new Path();
int heightScale = (int) (height / (maxValue - minValue));
int widthtScale = (int) (width / (2 * minTemp.size()));
Rect rect = new Rect();
for (int i = 0; i < minTemp.size(); i++) {
paint.setStyle(Paint.Style.FILL);
if (i == 0) {
minPath.moveTo((2 * i + 1) * widthtScale, (maxValue - minTemp.get(i)) * heightScale);
} else {
minPath.lineTo((2 * i + 1) * widthtScale, (maxValue - minTemp.get(i)) * heightScale);
}
canvas.drawCircle((2 * i + 1) * widthtScale, (maxValue - minTemp.get(i)) * heightScale, 5, paint);
String valueStr = String.valueOf(minTemp.get(i)) + "℃";
paint.getTextBounds(valueStr, 0, valueStr.length(), rect);
float textHeight = rect.height();
float textWidth = rect.width();
canvas.drawText(valueStr, (2 * i + 1) * widthtScale - textWidth / 2, (maxValue - minTemp.get(i)) * heightScale + textHeight + 20, paint);
}
for (int i = 0; i < maxTemp.size(); i++) {
if (i == 0) {
maxPath.moveTo((2 * i + 1) * widthtScale, (maxValue - maxTemp.get(i)) * heightScale);
} else {
maxPath.lineTo((2 * i + 1) * widthtScale, (maxValue - maxTemp.get(i)) * heightScale);
}
canvas.drawCircle((2 * i + 1) * widthtScale, (maxValue - maxTemp.get(i)) * heightScale, 5, paint);
String valueStr = String.valueOf(maxTemp.get(i)) + "℃";
paint.getTextBounds(valueStr, 0, valueStr.length(), rect);
float textHeight = rect.height();
float textWidth = rect.width();
canvas.drawText(valueStr, (2 * i + 1) * widthtScale - textWidth / 2, (maxValue - maxTemp.get(i)) * heightScale - textHeight - 5, paint);
}
paint.setStyle(Paint.Style.STROKE);
canvas.drawPath(minPath, paint);
canvas.drawPath(maxPath, paint);
super.onDraw(canvas);
}
public void setData(List<Integer> minTemp, List<Integer> maxTemp) {
this.minTemp = minTemp;
this.maxTemp = maxTemp;
minValue = minTemp.get(0);
maxValue = maxTemp.get(0);
for (int i : minTemp) {
if (i < minValue) {
minValue = i;
}
}
for (int n : maxTemp) {
if (n > maxValue) {
maxValue = n;
}
}
minValue = minValue - 3;
maxValue = maxValue + 3;
postInvalidate();
}
}