尝试通过MPAndroidChart绘制图表(折线图)

在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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值