登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 296|回复: 6

Android开发之初试MPAndroidChart,android开发笔试题

[复制链接]

301

主题

545

帖子

672

安币

手工艺人

发表于 2017-11-30 10:41:14 | 显示全部楼层 |阅读模式

                           
                                    

          使用MPAndroidChart需要先导入库,做法如下:

[Java] 查看源文件 复制代码
//在项目根目录的build.gradle中添加信息
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}

[Java] 查看源文件 复制代码
//在app目录下build.gradle中添加信息
dependencies {
    implementation 'com.github.PhilJay:MPAndroidChart:v3.0.2'
}

          库我们导入完了,接下来简单的说明一下使用。

[Java] 查看源文件 复制代码
//在布局文件中,添加图表控件
//LineChart 是折线图
 <com.github.mikephil.charting.charts.LineChart
            android:id="@+id/chart"
            android:layout_width="match_parent"
            android:layout_height="200dp">
 </com.github.mikephil.charting.charts.LineChart>

           贴一下实现代码,下面的这个例子用了两条线。

[Java] 查看源文件 复制代码
        lineChart = findViewById(R.id.chart);
        /*折线图*/
        //自定义了一个数据类
        MyData myData[] = {new MyData(1, 20), new MyData(2, 30),
                new MyData(3, 40), new MyData(4, 40), new MyData(5, 60)};
        MyData myDataT[] = {new MyData(1, 80), new MyData(2, 40),
                new MyData(3, 50), new MyData(4, 30), new MyData(5, 10)};
        //装数据,一条线上所有的数据点的集合
        List<Entry> entries = new ArrayList<>();
        for (MyData mData : myData) {
            entries.add(new Entry(mData.getX(), mData.getY()));
        }
        List<Entry> entries2 = new ArrayList<>();
        for (MyData mData : myDataT) {
            entries2.add(new Entry(mData.getX(), mData.getY()));
        }
        //给这条线起个名字,并对文字颜色、大小做一些设置
        LineDataSet dataSet = new LineDataSet(entries, "数据一");
        dataSet.setColor(Color.BLUE);//线的颜色
        //格式化值
        dataSet.setValueFormatter(new IValueFormatter() {
            @Override
            public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                return value + "元";
            }
        });
        //数据二
        LineDataSet dataSet2 = new LineDataSet(entries2, "数据二");
        dataSet2.setColor(Color.GREEN);//线的颜色
        //装入集合
        List<ILineDataSet> iLineDataSets = new ArrayList<>();
        iLineDataSets.add(dataSet);
        iLineDataSets.add(dataSet2);
        //如果是只显示一条线,直接传dataSet就可以了
        LineData lineData = new LineData(iLineDataSets);
        //设置边框是否绘制,边框线的粗细
        //chart.setDrawBorders(true);
        //chart.setBorderWidth(1);
        /*图表的缩放*/
        //图表是否允许Y轴缩放
        lineChart.setScaleYEnabled(false);
        //chart.setScaleEnabled(true);   // 两个轴上的缩放,X,Y分别默认为true
        // chart.setScaleXEnabled(true);  // X轴上的缩放,默认true
        // chart.setScaleYEnabled(true);  // Y轴上的缩放,默认true
        // chart.setPinchZoom(true);  // X,Y轴同时缩放
        // chart.setDoubleTapToZoomEnabled(true); // 双击缩放,默认true
        /*设置右下角的文本描述,文字大小、颜色、内容等*/
        Description description = new Description();
        description.setText("产量表");
        description.setEnabled(true);//是否显示右下角文字信息
        lineChart.setNoDataText("暂无数据"); // 没有数据时显示的内容
        lineChart.setDescription(description);
        /*轴与网格线*/
        XAxis xAxis = lineChart.getXAxis();
        xAxis.setDrawLabels(true);//x轴上的数值是否显示
        xAxis.setDrawAxisLine(true);//是否绘制X轴
        xAxis.setDrawGridLines(false);//是否绘制X轴的网格线
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//X轴的位置
        lineChart.getAxisRight().setEnabled(false);//取消y轴的右侧
        lineChart.getAxisLeft().setDrawGridLines(false);//是否绘制Y轴的网格线
        /*设置点击数据点后的弹窗*/
        //传入一个自定义的布局
        final MarkerView markerView = new MarkerView(CharActivity.this, R.layout.item_chart);
        lineChart.setMarker(markerView);
        lineChart.setData(lineData);//装载数据
        lineChart.invalidate();
        final TextView tv_X = markerView.findViewById(R.id.tv_X);
        final TextView tv_Y = markerView.findViewById(R.id.tv_Y);
        //设置数据点点击事件,这里是更新弹窗中的信息
        lineChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry e, Highlight h) {
                tv_X.setText(e.getX() + "");
                tv_Y.setText(e.getY() + "");
            }
            @Override
            public void onNothingSelected() {
            }
        });

          效果图:


        


柱状图
[Java] 查看源文件 复制代码
 <com.github.mikephil.charting.charts.BarChart
            android:id="@+id/bc"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            app:layout_constraintTop_toBottomOf="@id/chart">     
 </com.github.mikephil.charting.charts.BarChart>

[Java] 查看源文件 复制代码
        barChart = findViewById(R.id.bc);
        List<BarEntry> barEntries = new ArrayList<>();
        barEntries.add(new BarEntry(2000, 20));
        barEntries.add(new BarEntry(2001, 30));
        barEntries.add(new BarEntry(2002, 10));
        barEntries.add(new BarEntry(2003, 40));
        BarDataSet barDataSet = new BarDataSet(barEntries, "数据一");
        BarData barData = new BarData(barDataSet);
        XAxis xAxis1 = barChart.getXAxis();
        xAxis1.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis1.setDrawGridLines(false);
        barChart.getAxisRight().setEnabled(false);
        barChart.getAxisLeft().setValueFormatter(new IAxisValueFormatter() {
            @Override
            public String getFormattedValue(float value, AxisBase axis) {
                return (int) value + "吨";
            }
        });
        //给开头和结尾留空白
        barChart.setFitBars(true);
        barChart.setData(barData);
        barChart.invalidate();

          效果图:



        


饼状图
[Java] 查看源文件 复制代码
        <com.github.mikephil.charting.charts.PieChart
            android:id="@+id/pc"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            app:layout_constraintTop_toBottomOf="@id/bc">
        </com.github.mikephil.charting.charts.PieChart>

[Java] 查看源文件 复制代码
        pieChart = findViewById(R.id.pc);
        List<PieEntry> pieEntries = new ArrayList<>();
        pieEntries.add(new PieEntry(20, "部分一"));
        pieEntries.add(new PieEntry(50, "部分二"));
        pieEntries.add(new PieEntry(80, "部分三"));
        PieDataSet pieDataSet = new PieDataSet(pieEntries, "数据一");
        pieDataSet.setColors(new int[]{Color.DKGRAY, Color.CYAN, 
                    Color.GREEN});
        pieDataSet.setSliceSpace(3);//各个部分的间距
        PieData pieData = new PieData(pieDataSet);
        pieChart.setEntryLabelColor(Color.BLACK);
        //百分比显示
        pieChart.setUsePercentValues(true);
        pieChart.setData(pieData);
        pieChart.invalidate();

        效果图:



        


雷达图
[Java] 查看源文件 复制代码
        <com.github.mikephil.charting.charts.RadarChart
            android:id="@+id/rc"
            android:layout_width="match_parent"
            app:layout_constraintTop_toBottomOf="@id/pc"
            android:layout_height="200dp">
        </com.github.mikephil.charting.charts.RadarChart>

[Java] 查看源文件 复制代码
        radarChart = findViewById(R.id.rc);
        List<RadarEntry> radarEntries = new ArrayList<>();
        radarEntries.add(new RadarEntry(1, "一"));
        radarEntries.add(new RadarEntry(2, "二"));
        radarEntries.add(new RadarEntry(3, "三"));
        radarEntries.add(new RadarEntry(5, "四"));
        RadarDataSet radarDataSet = new RadarDataSet(radarEntries, "数据一");
        RadarData radarData = new RadarData(radarDataSet);
        radarChart.setData(radarData);

效果图:

                           
               
                    
   

14

主题

1万

帖子

3926

安币

码皇(巴士元老)

Rank: 8Rank: 8

发表于 2017-12-1 12:05:17 | 显示全部楼层
感谢大神~

1

主题

8974

帖子

2579

安币

Android大神

Rank: 6Rank: 6

发表于 2017-12-2 07:13:30 | 显示全部楼层
感谢分享,楼主V5~

4

主题

9248

帖子

820

安币

代码手工艺人

Rank: 4

发表于 2017-12-2 21:44:50 | 显示全部楼层
安卓巴士是个不错的网站,我来顶个贴~

20

主题

8843

帖子

2382

安币

Android大神

Rank: 6Rank: 6

发表于 2017-12-3 07:10:46 | 显示全部楼层
帮帮顶顶!!

2

主题

9036

帖子

2509

安币

Android大神

Rank: 6Rank: 6

发表于 2017-12-3 17:06:51 | 显示全部楼层
不错不错,楼主辛苦了。。。

28

主题

9919

帖子

1404

安币

Android大神

小白

Rank: 6Rank: 6

发表于 2017-12-3 23:03:20 | 显示全部楼层
感谢分享,安卓巴士有你更精彩:lol
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表