android 时间曲线图
时间: 2023-08-04 17:15:24 浏览: 114
要绘制 Android 上的时间曲线图,你可以使用 Android 中的 Canvas 和 Paint 类。以下是一个简单的代码示例,可以绘制一个简单的时间曲线图:
```java
public class TimeLineView extends View {
private Paint paint;
private float[] timePoints = {0, 2, 3, 4, 5, 7}; // 时间点
private float[] values = {0, 2, 1, 3, 2, 4}; // 值
public TimeLineView(Context context) {
super(context);
init();
}
public TimeLineView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public TimeLineView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
paint.setStrokeWidth(5f);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制横轴
canvas.drawLine(100, getHeight() - 100, getWidth() - 100, getHeight() - 100, paint);
// 绘制竖轴
canvas.drawLine(100, getHeight() - 100, 100, 100, paint);
// 绘制时间点
for (float timePoint : timePoints) {
float x = convertTimeToX(timePoint);
canvas.drawCircle(x, getHeight() - 100, 10, paint);
}
// 绘制时间曲线
Path path = new Path();
path.moveTo(convertTimeToX(timePoints[0]), convertValueToY(values[0]));
for (int i = 1; i < timePoints.length; i++) {
path.lineTo(convertTimeToX(timePoints[i]), convertValueToY(values[i]));
}
canvas.drawPath(path, paint);
}
private float convertTimeToX(float time) {
float totalDuration = timePoints[timePoints.length - 1] - timePoints[0];
float x = (time - timePoints[0]) / totalDuration * (getWidth() - 200) + 100;
return x;
}
private float convertValueToY(float value) {
float maxValue = getMaxValue();
float y = getHeight() - 100 - value / maxValue * (getHeight() - 200);
return y;
}
private float getMaxValue() {
float maxValue = Float.MIN_VALUE;
for (float value : values) {
if (value > maxValue) {
maxValue = value;
}
}
return maxValue;
}
}
```
在这个示例中,`timePoints` 数组存储时间点,`values` 数组存储相应的值。在 `onDraw()` 方法中,我们首先绘制了横轴和竖轴,然后绘制了时间点,最后绘制了时间曲线。`convertTimeToX()` 和 `convertValueToY()` 方法用于将时间和值转换为 x 和 y 坐标。注意,我们在这里假设时间轴从 0 开始,因此第一个时间点为 0。
你可以在自己的项目中使用这个示例代码为基础,根据自己的需求进行修改和扩展。
阅读全文