• Android使用图表库简单教程


    经常要用到统计数据这个功能,要直观的显示出来,最好还是用图表。自己弄也麻烦,所以用了Github上的一个非常著名的开源图标库:MpChart。

    使用前去网上找它俩的jar包,然后导入就行。资源比较好找,分别是mpchartlib.jar和nineoldandroids-xxx.jar。

    效果图:

    布局文件:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:background="@drawable/data_back"
        xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
        android:layout_height="match_parent" tools:context=".MainActivity">
    
    
        <com.github.mikephil.charting.charts.BarChart
    
            android:id="@+id/spread_bar_chart"
            android:layout_width="match_parent"
            android:layout_height="320dp"
    
    
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    
    
    
    
    
    </RelativeLayout>

    主要是在布局里面,加入BarChart这个控件,其它的属性与基本控件一样设置。

    MainActivity:

    public class MainActivity extends AppCompatActivity {
    
        //图表的实例
        private BarChart mBarChart;
        //图表的数据实例
        private BarData mBarData;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //获得该控件
            mBarChart = (BarChart) findViewById(R.id.spread_bar_chart);
    
            //设置数据
            mBarData = getBarData(7, 4000.0f);
    
            //显示控件
            showBarChart(mBarChart, mBarData);
    
        }
    
        private void showBarChart(BarChart barChart, BarData barData) {
            barChart.setDrawBorders(false);  ////是否在折线图上添加边框
    
            barChart.setDescription("");// 数据描述
    
            // 如果没有数据的时候,会显示这个,类似ListView的EmptyView
            barChart.setNoDataTextDescription("You need to provide data for the chart.");
    
            barChart.setDrawGridBackground(false); // 是否显示表格颜色
            barChart.setGridBackgroundColor(Color.WHITE & 0x00000000); // 表格的的颜色,在这里是是给颜色设置一个透明度
    
            barChart.setTouchEnabled(true); // 设置是否可以触摸
    
            barChart.setDragEnabled(true);// 是否可以拖拽
            barChart.setScaleEnabled(true);// 是否可以缩放
    
            barChart.setPinchZoom(false);//
    
         //barChart.setBackgroundColor(Color.BLUE);// 设置整个背景
    
            barChart.setDrawBarShadow(false);//把条形的颜色去掉
            barChart.getAxisRight().setEnabled(false);//右边Y轴不显示
            barChart.getAxisLeft().setTextColor(Color.WHITE);//左边Y轴白字
            barChart.getAxisLeft().setDrawGridLines(false);//阴影去掉
            barChart.getAxisRight().setDrawGridLines(false);//阴影去掉
            barChart.getXAxis().setDrawGridLines(false);
    
            //barChart.setDrawBarShadow(true);
    
            barChart.setData(barData); // 设置数据
    
            Legend mLegend = barChart.getLegend(); // 设置比例图标示
    
            mLegend.setForm(Legend.LegendForm.CIRCLE);// 样式
            mLegend.setFormSize(6f);// 字体
            mLegend.setTextColor(Color.WHITE);// 颜色
    
    
    
    
    
    //      X轴设定
         XAxis xAxis = barChart.getXAxis();
          xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//把x轴放到底部
            xAxis.setTextColor(Color.WHITE);
    
    
    
    
    
            barChart.animateX(2500); // 立即执行的动画,x轴
        }
    
    
        private BarData getBarData(int count, float range) {
            ArrayList<String> xValues = new ArrayList<String>();
    
            /*
            for (int i = 0; i < count; i++) {
                xValues.add("第" + (i + 1) + "季度");//x轴 String的数组
            }
            */
    
            //x轴的数据
            xValues.add("周一");
            xValues.add("周二");
            xValues.add("周三");
            xValues.add("周四");
            xValues.add("周五");
            xValues.add("周六");
            xValues.add("周日");
    
            ArrayList<BarEntry> yValues = new ArrayList<BarEntry>();
    
    
            //Y轴的数据
            for (int i = 0; i < 7; i++) {
                float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
                yValues.add(new BarEntry(value, i));
    
    
            }
    
    
            // y轴的数据集合
            BarDataSet barDataSet = new BarDataSet(yValues, "卡路里");
    
            
    
    
            //barDataSet.setColor(Color.rgb(114, 188, 223));
    
            barDataSet.setColor(Color.rgb(255, 255, 255));
            //barDataSet.setBarShadowColor(Color.RED);
            //barDataSet.setBarSpacePercent(800);
            barDataSet.setValueTextColor(Color.WHITE);
    
    
    
            ArrayList<BarDataSet> barDataSets = new ArrayList<BarDataSet>();
            barDataSets.add(barDataSet); // add the datasets
    
    
            BarData barData = new BarData(xValues, barDataSets);
    
    
            return barData;
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }

    虽然我的示例图效果一般,但是可以自己设计,也可以用折线图,圆盘等等的图表,这里只介绍最基本的用法,请大家自行探索。

  • 相关阅读:
    07-图5 Saving James Bond
    07-图4 哈利·波特的考试(25 分)多源最短路,邻接矩阵
    最短路径问题
    最小生成树
    06-图3 六度空间(30 分)
    06-图2 Saving James Bond
    06-图1 列出连通集(25 分)邻接矩阵

    05-树9 Huffman Codes(30 分)
    集合及运算
  • 原文地址:https://www.cnblogs.com/wzben/p/5379041.html
Copyright © 2020-2023  润新知