java如何绘制温度实时曲线_Android实现天气预报温度/气温折线趋势图
Android实现天气预报温度/气温折线趋势图
天气预报的APP应用中,难免会遇到绘制天气温度/气温,等关于数据趋势的折线或者曲线图,这类关于气温/温度的折线图,一般会有两条线,一条是高温线,一条是低温线。
我之前介绍了一个Android平台上第三方开源框架的统计图表库MPAndroidChart(文章链接地址:http://blog.csdn.net/zhangphil/article/details/47656521 ),具体使用方法详情请看这篇文章。
现在基于Android平台上的MPAndroidChart实现气温/温度折线图。
主Activity:MainActivity.java的全部代码:
package zhangphil.chart;
import java.text.DecimalFormat;
import java.util.ArrayList;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.Legend.LegendForm;
import com.github.mikephil.charting.components.Legend.LegendPosition;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.XAxis.XAxisPosition;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.components.YAxis.AxisDependency;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.utils.ValueFormatter;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LineChart mChart = (LineChart) findViewById(R.id.chart);
setChart(mChart);
// 制作5个数据点。
setData(mChart, 5);
Legend l = mChart.getLegend();
l.setForm(LegendForm.LINE);
l.setTextSize(12f);
l.setTextColor(Color.BLACK);
l.setPosition(LegendPosition.BELOW_CHART_CENTER);
XAxis xAxis = mChart.getXAxis();
// 将X坐标轴的标尺刻度移动底部。
xAxis.setPosition(XAxisPosition.BOTTOM);
// X轴之间数值的间隔
xAxis.setSpaceBetweenLabels(1);
xAxis.setTextSize(12f);
xAxis.setTextColor(Color.BLACK);
YAxis leftAxis = mChart.getAxisLeft();
setYAxisLeft(leftAxis);
YAxis rightAxis = mChart.getAxisRight();
setYAxisRight(rightAxis);
}
private void setChart(LineChart mChart) {
mChart.setDescription("@ http://blog.csdn.net/zhangphil");
mChart.setNoDataTextDescription("如果传递的数值是空,那么你将看到这段文字。");
mChart.setHighlightEnabled(true);
mChart.setTouchEnabled(true);
mChart.setDragDecelerationFrictionCoef(0.9f);
mChart.setDragEnabled(true);
mChart.setScaleEnabled(true);
mChart.setDrawGridBackground(true);
mChart.setHighlightPerDragEnabled(true);
mChart.setPinchZoom(true);
mChart.setBackgroundColor(Color.LTGRAY);
mChart.animateX(3000);
}
private void setYAxisLeft(YAxis leftAxis) {
// 在左侧的Y轴上标出4个刻度值
leftAxis.setLabelCount(4, true);
// Y坐标轴轴线的颜色
leftAxis.setGridColor(Color.RED);
// Y轴坐标轴上坐标刻度值的颜色
leftAxis.setTextColor(Color.RED);
// Y坐标轴最大值
leftAxis.setAxisMaxValue(50);
// Y坐标轴最小值
leftAxis.setAxisMinValue(10);
leftAxis.setStartAtZero(false);
leftAxis.setDrawLabels(true);
}
private void setYAxisRight(YAxis rightAxis) {
// Y坐标轴上标出8个刻度值
rightAxis.setLabelCount(8, true);
// Y坐标轴上刻度值的颜色
rightAxis.setTextColor(Color.BLUE);
// Y坐标轴上轴线的颜色
rightAxis.setGridColor(Color.BLUE);
// Y坐标轴最大值
rightAxis.setAxisMaxValue(30);
// Y坐标轴最小值
rightAxis.setAxisMinValue(-5);
rightAxis.setStartAtZero(false);
rightAxis.setDrawLabels(true);
}
private void setData(LineChart mChart, int count) {
ArrayList xVals = new ArrayList();
for (int i = 0; i < count; i++) {
xVals.add("某月" + (i + 1) + "日");
}
ArrayList yHigh = new ArrayList();
LineDataSet high = new LineDataSet(yHigh, "高温");
setHighTemperature(high, yHigh, count);
ArrayList yLow = new ArrayList();
LineDataSet low = new LineDataSet(yLow, "低温");
setLowTemperature(low, yLow, count);
ArrayList dataSets = new ArrayList();
dataSets.add(high);
dataSets.add(low);
LineData data = new LineData(xVals, dataSets);
data.setValueTextColor(Color.DKGRAY);
data.setValueTextSize(10f);
mChart.setData(data);
}
private void setHighTemperature(LineDataSet high, ArrayList yVals,
int count) {
for (int i = 0; i < count; i++) {
float val = (float) Math.random() + 30;
yVals.add(new Entry(val, i));
}
// 以左边的Y坐标轴为准
high.setAxisDependency(AxisDependency.LEFT);
high.setLineWidth(5f);
high.setColor(Color.RED);
high.setCircleSize(8f);
high.setCircleColor(Color.YELLOW);
high.setCircleColorHole(Color.DKGRAY);
high.setDrawCircleHole(true);
// 设置折线上显示数据的格式。如果不设置,将默认显示float数据格式。
high.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value) {
DecimalFormat decimalFormat = new DecimalFormat(".0");
String s = "高温" + decimalFormat.format(value);
return s;
}
});
}
private void setLowTemperature(LineDataSet low, ArrayList yVals,
int count) {
for (int i = 0; i < count; i++) {
float val = (float) Math.random() + 5;
yVals.add(new Entry(val, i));
}
// 以右边Y坐标轴为准
low.setAxisDependency(AxisDependency.RIGHT);
// 折现的颜色
low.setColor(Color.GREEN);
// 线宽度
low.setLineWidth(3f);
// 折现上点的圆球颜色
low.setCircleColor(Color.BLUE);
// 填充圆球中心部位洞的颜色
low.setCircleColorHole(Color.LTGRAY);
// 圆球的尺寸
low.setCircleSize(5f);
low.setDrawCircleHole(true);
low.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float value) {
DecimalFormat decimalFormat = new DecimalFormat(".0");
String s = "低温" + decimalFormat.format(value);
return s;
}
});
}
}
MainActivity.java需要的布局文章activity_main.xml :
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent" />
运行结果如图:
需要对MPAndroidChart的坐标体系加以说明。MPAndroidChart的Y纵坐标轴分为左右两条纵坐标:左纵坐标轴(chart的getAxisLeft()获得的YAxis)和右纵坐标轴(chart的getAxisRight()获得的YAxis)。虽然它们都是MPAndroidChart中的Yaxis一个类代表,但它们在具体使用中是相互独立的,但它们共用X坐标轴(横坐标)。
比如在本例中,左边的红色Y纵坐标轴独立代表高温折线,它有自己独立运行的一套绘图机制;同理,右边蓝色Y纵坐标轴独立代表的低温折线,它也有自己独立运行的一套绘图机制。不要将两者混为一谈。
java如何绘制温度实时曲线_Android实现天气预报温度/气温折线趋势图相关推荐
- vb实时曲线的绘制和保存
在VB中绘制实时曲线是比较难的,一般要应用第三方控件或是Windows API函数来完成,但是如果你对实时曲线的要求不是很高,只要能表示出当前的一般情况的话,我们可以直接应用VB提供给我们的空间来完成 ...
- 实时曲线 温湿度表_温度/湿度一目了然,米家蓝牙温湿度计使用体验
每年的6月雨季,杭州的"黄梅天"(梅雨季)都会如约而至,因为正值杨梅成熟的采摘季,因此而得名.黄梅天最直接的感受就是如同置身温室当中,闷.热.潮交织在一起,相当的难受.而我们生活的 ...
- teechart绘制实时曲线_基于OpenCV的显著图绘制
显着性是图像的突出部分,我们的大脑会特别关注这个部分.上图突出了我们在看到一个场景或图像时会注意到的部分.例如,大家有没有曾经在看广告的时候被一些特别的内容吸引,为此我们还特意停下来多看了一会儿?这就 ...
- 振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线
振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线 指令生成器 ( 1) 指令生成 指令生成器可根据需要生成符合 MODBUS 和 AABB 通讯协议的读取和控制指令. 通过点击串口调试工 ...
- 用计算机控制检测实时温度,温度实时测量及控制系统.doc
温度实时测量及控制系统 摘要 文中的设计电路以AT89C52单片机作为控制器.主要由键盘输入电路.温度测量电路.输出显示电路和电动机控制电路四部分.吸收了硬件软件化的思想,大部分功能通过软件来实现,使 ...
- STM32连续采样_STM32 - 利用双缓冲实现实时曲线显示(续)
前言 大概半个月之前捣鼓了下利用STM32实现实时曲线显示,中间又做了一点小改进和扩充,在这里更新一下: 利用DMA进行缓冲区到LCD GRAM的像素数据搬运 效果更好的曲线绘制策略 代码可以在这里找 ...
- chart控件做实时曲线显示_组态王实时趋势曲线控件介绍,让你对此不再陌生
一.组态王实时趋势控件的特点 1. 通过TCPIP获得实时数据,数据服务器可以是任何一台运行组态王的机器,而不需进行组态王网络配置. 2. 最多可以显示20条曲线. 3. 可以设置每条曲线的绘制方式, ...
- (一)QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现
系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)QCustomPlot常见属性设置.多曲线绘制.动态曲线绘制.生成游标.矩形放大等功能实现 第二章: (二)QCustomPlot ...
- Qt串口通信实时曲线上位机源代码
Qt串口通信实时曲线上位机源代码 带用户配置保存 数据保存带有坐标轴缩放 拖动平移放大等功能,提供,提供源代码,注释,软件文档使用说明,可进行二次开发 通过定时发送获取数据,并将接收的数据采用Qt自带 ...
最新文章
- 程序员吐槽:去再好的互联网公司也就是个打工仔,还累出一身病
- 集存款(复利单利)贷款为一体的计算器(最新版)
- 还有什么芯片没涨?ST、ON、Microchip、Xilinx、东芝开启新一轮涨价潮
- 转:在eclipse中搭建maven工程(第二种方法)
- git通过指令查看某一个已经修改的文件的改动
- 桂电在linux、Mac OS环境下使用出校器(支持2.14)
- SpringBoot集成MyBatis详解
- mat查找多线程并发下大对象导致的堆内存问题
- 电脑教程从入门到精通_【电路仿真】视频教程资料包,proteus入门到精通+实例教程+软件,免费下载!...
- 【合集】高等数学随堂笔记-苏德矿老师-部分内容汇总
- 【Android】面试宝典
- vue-cli 项目打包后 代理接口报404错误 解决办法!
- 时间煮雨,人生浅笑嫣然
- LARS算法的几何意义
- java连接MQTT服务器(Springboot整合MQTT)
- 鸿蒙系统可以跟ios媲美吗,任正非再次确认:不需要2年,鸿蒙系统就可以媲美ios系统...
- redis stream持久化_[灌水] Redis 的持久化
- 更改CloudStack中KVM平台的Windows虚拟机默认磁盘类型为VirtIO
- 星空深蓝色系新品项目发布会PPT模板
- HTML特殊符号(字符实体)大全
热门文章
- android ui框架详解,多图详解 “Android UI”设计官方教程(二)
- myrio与fpga编程_【虚拟课堂】LabVIEW与MyRIO的逐点比较法插补实现(含FPGA)
- 车辆智能称重管理系统是什么
- [ZZ]Windows磁盘驱动基础教程
- 层次分析法和熵值法经典实操案例+数据
- 简单计算器的实现java_java实现简单计算器
- Javaweb人才招聘系统
- 几种滤波器的比较(巴特沃斯、切比雪夫、贝塞尔滤波器)
- 计算机绘图三号图纸,江苏开放大学计算机绘图形考3
- 应届生报考MEM时要注意了!非全不是你的菜!