implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'//曲线图框架
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/dp_20"/>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_historical_detail);
initChart();//初始化图表
setData();//设置图标值
}
private void setData() {
//假数据 折线1111 86400
ArrayList<Entry> values1 = new ArrayList<Entry>();
List<StatisticsBean> datas = new ArrayList<>();
LineDataSet set1;
datas.add(new StatisticsBean(0, "9/21"));//第一个值
for (int i = 0; i < 30; i++) {
float val = (float) (Math.random() * 100);//随机数
datas.add(new StatisticsBean(val, "9/22"));
Entry barEntry1 = new Entry(i+1, datas.get(i).getYshaft(), getResources().getDrawable(R.mipmap.ic_dian));
values1.add(barEntry1);
}
XAxisValueFormatter0 custom = new XAxisValueFormatter0(datas);
chart.getXAxis().setValueFormatter(custom);
if (chart.getData() != null && chart.getData().getDataSetCount() > 0) {
set1 = (LineDataSet) chart.getData().getDataSetByIndex(0);
set1.setValues(values1);
set1.notifyDataSetChanged();
chart.getData().notifyDataChanged();
chart.notifyDataSetChanged();
} else {
set1 = new LineDataSet(values1, "温度统计");
set1.setColor(Color.WHITE); //折线的颜色
set1.setMode(LineDataSet.Mode.HORIZONTAL_BEZIER); // 设置折线类型
set1.setValueTextColor(Color.WHITE);//设置字体颜色
set1.setValueTextSize(13f);//设置字体大小
ArrayList<ILineDataSet> dataSets = new ArrayList<>();
dataSets.add(set1);
LineData data = new LineData(dataSets);
chart.setData(data);//设置值
data.setValueFormatter(new ValueFormatter() {
@Override
public String getFormattedValue(float v) {
String str = v + "";
if (str.length() == 0) {
return str;
}
if (isRyzSw){
return str.substring(0, str.indexOf(".")) + "mg/L";//设置自己的返回位数
}else {
return str.substring(0, str.indexOf(".")) + "℃";//设置自己的返回位数
}
}
});
}
//chart.invalidate();//绘制图表
chart.setVisibleXRange(0, 6);//设置x轴显示范围,如果不设置会一次加载所有的点,很难看
chart.getLegend().setEnabled(false);//左下角颜色块的标注取消
chart.invalidate();//数据刷新
}
/**
* 初始化曲线图
*/
private void initChart() {
chart.getDescription().setEnabled(false); // 禁用描述文本
//chart.setMaxVisibleValueCount(60);//设置最大值条目,超出之后不会有值
chart.setTouchEnabled(true);//支持触控手势
chart.setDragEnabled(true); //能否拖拽
chart.setScaleEnabled(false); //能否缩放
//chart.setBackgroundColor(getResources().getColor(R.color.bg_green));//背景颜色
chart.setPinchZoom(true);// 沿两个轴强制缩放
//X轴线
XAxis xAxis = chart.getXAxis();//获取x轴线
//xAxis.setAxisMinimum(0f); //左边x轴字体大小 从零开始
//chart.getAxisLeft().setTextSize(3);
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); //设置x轴的显示位置
xAxis.setDrawGridLines(true);//设置网格布局
xAxis.setGridColor(getResources().getColor(R.color.white));//设置该轴的网格线颜色
xAxis.setAvoidFirstLastClipping(false);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘
xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值 默认true
xAxis.setGranularityEnabled(true); //缩放后x 轴数据重叠问题
//xAxis.setTextSize(14f);//X轴线字体大小
xAxis.setTextColor(getResources().getColor(R.color.white));//X轴线字体颜色
chart.animateXY(1000, 1000); // 动画水平和垂直1000毫秒
//Y轴线 左
YAxis axisLeft = chart.getAxisLeft();//左Y轴
axisLeft.setDrawLabels(false);//左线隐藏
//axisLeft.setAxisMaximum(100f);//轴范围
axisLeft.setAxisMinimum(1f);//左边x轴 从零开始
axisLeft.setDrawGridLines(true);//设置网格布局
axisLeft.setGridColor(getResources().getColor(R.color.white));//设置该轴的网格线颜色
//Y轴线 右
YAxis axisRight = chart.getAxisRight();//右Y轴
axisRight.setEnabled(false);//禁用双轴(只使用左轴)
// 在数据后面而不是顶部画出限制线
axisLeft.setDrawLimitLinesBehindData(true);
xAxis.setDrawLimitLinesBehindData(true);
}