Android数学图像MPAndroidChart的使用

1、添加gradle配置

   
   
compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'

2、布局文件

   
   
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1BBC9B"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#1BBC9B"
android:gravity="center_vertical|center_horizontal"
android:text="今日温度变化趋势"
android:textColor="#fff"
android:textSize="18sp"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@null"
android:onClick="backTo"
android:padding="8dp"
android:src="@drawable/back"/>
</FrameLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:alpha="0.3"
android:background="#FFFFFF"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="250dp"
android:background="@drawable/bg_chart">
<View
android:layout_width="42dp"
android:layout_height="228dp"
android:alpha="0.3"
android:background="#FFFFFF"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="22dp"
android:layout_gravity="bottom"
android:alpha="0.3"
android:background="#FFFFFF"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_xstart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginLeft="42dp"
android:text="2000-00-00 00:00:00"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:gravity="center_horizontal"
android:text="......"/>
<TextView
android:id="@+id/tv_xend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="2099-12-31 23:59:59"/>
</LinearLayout>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</LinearLayout>

3、填充数据设置监听    

   
   
private LineChart chart = (LineChart) findViewById(R.id.chart);
ChartUtils.initChart(chart);// 初始化设置
chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry e, Highlight h) {
String[] data = (String[]) e.getData();
if(dateRes.getVisibility()==View.GONE)
dateRes.setVisibility(View.VISIBLE);
dateRes.setText(data[0].replace(".0", ""));
changeLvItemBackground(Integer.valueOf(data[1]));
}
@Override
public void onNothingSelected() {}
});
{
//在子线程获取数据并在主线程更新数学图标
ArrayList<Temperature> tmps = (ArrayList<Temperature>) msg.obj;
ChartUtils.notifyDataSetChanged(chart, tmps);
}
    
    
private void changeLvItemBackground(int index) {// 修改指定索引的条目背景颜色
if(dataAdapter.getCurrentItem()==index)
return;
dataAdapter.setCurrentItem(index);
dataAdapter.notifyDataSetChanged();
lvRecent.setSelection(index);
}
    
    
public class ChartUtils {
private static ArrayList<String> xValues = new ArrayList<>();
private static final String[] xxValues =
new String[] {"05:00", "07:00", "09:00", "11:00", "13:00", "15:00", "17:00", "19:00", "21:00", "23:00"};
public static LineChart initChart(LineChart chart) {
// 不显示数据描述
chart.getDescription().setEnabled(false);
// 没有数据的时候,显示“暂无可用数据”
chart.setNoDataText("暂无可用数据");
// 不显示表格颜色
chart.setDrawGridBackground(false);
chart.setDragEnabled(true);// 拖动
chart.setPinchZoom(true);// 缩放
// 可以缩放
chart.setScaleEnabled(true);
// 不显示y轴右边的值
chart.getAxisRight().setEnabled(false);
// 不显示图例
Legend legend = chart.getLegend();
legend.setEnabled(false);
// 向左偏移15dp,抵消y轴向右偏移的30dp
chart.setExtraLeftOffset(-15);
XAxis xAxis = chart.getXAxis();
// 不显示x轴
xAxis.setDrawAxisLine(false);
xAxis.setEnabled(false);
// 设置x轴数据的位置
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setTextColor(Color.WHITE);
xAxis.setTextSize(12);
xAxis.setGridColor(Color.parseColor("#30FFFFFF"));
// 设置x轴数据偏移量
// xAxis.setYOffset(-12);
YAxis yAxis = chart.getAxisLeft();
// 不显示y轴
yAxis.setDrawAxisLine(false);
yAxis.setDrawGridLines(true);
// 设置y轴数据的位置
yAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
// 不从y轴发出横向直线
yAxis.setDrawGridLines(false);
yAxis.setTextColor(Color.parseColor("#61B9AD"));
yAxis.setTextSize(12);
// 设置y轴数据偏移量
yAxis.setXOffset(30);
yAxis.setYOffset(-3);
yAxis.setAxisMinimum(0);
chart.invalidate();
return chart;
}
public static void setData(LineChart chart, List<Temperature> values) {
XAxis xAxis = chart.getXAxis();
xAxis.setLabelCount(5);
xAxis.setValueFormatter(new MyValueFormatter());
double min = values.get(0).getYcwd();
double max = values.get(0).getYcwd();
ArrayList<Entry> yValue = new ArrayList<>();
ArrayList<Entry> yValue1 = new ArrayList<>();
for (int i = 0; i < values.size(); i++) {
Temperature value = values.get(i);
double nowMin = getMinYWD(value.getYcwd(),value.getCxwd());
double nowMax = getMaxYWD(value.getYcwd(),value.getCxwd());
min = getMinYWD(min,nowMin);
max = getMaxYWD(max,nowMax);
//if (value.getHjwd() < min)
//min = value.getYcwd();
xValues.add(value.getSj());
Entry yEntry = new Entry(i, (float) value.getCxwd());
String[] dataa = new String[] {values.get(i).getSj(), "" + i};
yEntry.setData(dataa);
yValue.add(yEntry);
Entry yEntry1 = new Entry(i, (float) value.getYcwd());
yEntry1.setData(dataa);
yValue1.add(yEntry1);
}
chart.getAxisLeft().setAxisMinimum((float) (min - 20));
chart.getAxisLeft().setAxisMaximum((float) (max + 10));
LineDataSet dataSet = new LineDataSet(yValue, "C相温度");
LineDataSet dataSet1 = new LineDataSet(yValue1, "预测温度");
dataSet.setColor(Color.RED);
dataSet1.setColor(Color.BLUE);
List<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(dataSet);
dataSets.add(dataSet1);
LineData lineData = new LineData(dataSets);
chart.setData(lineData);
}
public static void notifyDataSetChanged(LineChart chart, List<Temperature> values) {
setData(chart, values);
chart.invalidate();
}
private static class MyValueFormatter implements IAxisValueFormatter {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return xxValues[(int) value % xxValues.length];
}
}
private static double getMinYWD(double wd1, double wd2){
return wd1 > wd2 ? wd2 : wd1;
}
private static double getMaxYWD(double wd1, double wd2){
return wd1 < wd2 ? wd2 : wd1;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值