在build.gradle(:app)的dependencies里添加MPAndroidChart
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
setting.gradle里添加:maven { url "https://jitpack.io" }
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url "https://jitpack.io" }//添加的行
}
}
在layout布局文件里添加图表控件,折线图LineChart
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/lc_temchange"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--该折线图就当表现温度变化吧-->
对布局文件对应的java文件添加修改
public class StatisticsFragment extends android.app.Fragment {
private LineChart tempchart;
//创建一个temchart变量
//......省略其他代码......
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view=inflater.inflate(R.layout.fragment_statistics, container, false);
//画温度折线图
tempchart=view.findViewById(R.id.lc_temchange);
tempchart.getDescription().setEnabled(false);//图表的文本描述,先不管这个设置成false吧
tempchart.getAxisRight().setEnabled(false);//禁用右轴
ArrayList<Entry> values1=new ArrayList<>();
values1.add(new Entry(3,27));
values1.add(new Entry(4,26));
values1.add(new Entry(5,27));
values1.add(new Entry(6,25));
values1.add(new Entry(7,24));
values1.add(new Entry(8,25));
values1.add(new Entry(9,25));
values1.add(new Entry(10,25));
LineDataSet set1=new LineDataSet(values1,"最近7小时室内温度变化");
set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);//让折线图的曲线平滑
LineData data1=new LineData(set1);
tempchart.setData(data1);
return view;
}
}
效果
以上就可以在android上绘制出一个折线图了,但是大多数情况下坐标轴上需要显示信息,如x轴上显示时间,y轴上显示温度:
绘制方法:
//绘制温度变化折线图--周
private void drawwenduchart_week(){
tempchart.clear();
tempchart.setScaleEnabled(false);//禁止缩放
tempchart.getDescription().setEnabled(false);
tempchart.getAxisRight().setEnabled(false);
ArrayList<Entry> values2=new ArrayList<>();
values2.add(new Entry(1,25));
values2.add(new Entry(2,27));
values2.add(new Entry(3,28));
values2.add(new Entry(4,26));
values2.add(new Entry(5,25));
values2.add(new Entry(6,26));
values2.add(new Entry(7,24));
LineDataSet set2=new LineDataSet(values2,"过去一周室内温度变化");
set2.setMode(LineDataSet.Mode.CUBIC_BEZIER);//让折线图的曲线平滑
set2.setColor(getActivity().getResources().getColor(R.color.skyblue));//设置折线颜色
//设置x轴格式
XAxis xAxis=tempchart.getXAxis();
xAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getAxisLabel(float v, AxisBase axisBase) {
int x= (int) v;
switch (x){
case 1:
return "11月17日";
case 2:
return "11月18日";
case 3:
return "11月19日";
case 4:
return "11月20日";
case 5:
return "11月21日";
case 6:
return "11月22日";
case 7:
return "11月23日";
}
return "";
}
});
//设置y轴格式
YAxis yAxis=tempchart.getAxisLeft();
yAxis.setValueFormatter(new ValueFormatter() {
@Override
public String getAxisLabel(float v, AxisBase axisBase) {
return Float.toString(v)+"℃";
}
});
//设置填充颜色
set2.setDrawFilled(true);
set2.setFillColor(getActivity().getResources().getColor(R.color.skyblue));
LineData data2=new LineData(set2);
tempchart.setData(data2);
}