美文网首页
2018-03-08

2018-03-08

作者: jinchuang | 来源:发表于2018-03-08 15:54 被阅读0次

    图表控件库 MPAndroidChart 的使用

    使用方法

    • 在build.gradle的dependencies节点中加入如下代码

        dependencies {
            compile fileTree(include: ['*.jar'], dir: 'libs')
            compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
        }
      
    • 跟目录的build.gradle的repositories节点中加入如下代码

       maven { url 'https://maven.google.com' }
      

    示例

    柱状图

    效果图
    xgz.png
    • 在XML中加入如下代码

        <com.github.mikephil.charting.charts.BarChart
                    android:id="@+id/chart_there"
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:layout_marginTop="20dp"
                    android:layout_marginRight="20dp"
                    android:layout_marginLeft="20dp"
                    android:background="@color/white"
                    />
      
    • 柱状图自定义颜色的替换

         /**
          * @param mBarChart 柱状图颜色的替换
          */
            public void afa(BarChart mBarChart){
                BarChartShapeRender renderer = new BarChartShapeRender(mBarChart, mBarChart.getAnimator(), mBarChart.getViewPortHandler());
                //柱状图颜色
                renderer.setBarDrawable(getResources().getDrawable(R.drawable.shape_bar_chart));
                //点击后的颜色,Y超过20000的颜色
                renderer.setWarnBarDrawable(20000,getResources().getDrawable(R.drawable.shape_bar_common));
        mBarChart.setRenderer(renderer);
             }
      
    • 主要代码以及数据的设置

        public static void drawOne(BarChart mBarChart_One){
                ArrayList<String> mlist=new ArrayList<String>();
                Random random = new Random();
                //模拟数据,X数据
                ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
                for (int i = 0; i < 7; i++) {//添加数据源
                    yVals1.add(new BarEntry( i+1,random.nextInt(25000)));
                }
                mBarChart_One.setTouchEnabled(true);//是否可点击
                mBarChart_One.setDrawBarShadow(false);//表不要阴影
                mBarChart_One.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
                         @Override
                         public void onValueSelected(Entry e, Highlight h) {
                             Log.e("---->",e.getX()+"  "+e.getY());
                         }
      
                         @Override
                         public void onNothingSelected() {
                 
                         }
                     });
                mBarChart_One.setDrawValueAboveBar(true);//true文字绘画在bar上
                Description description=new Description();
                description.setText("");
                mBarChart_One.getDescription().setEnabled(false);
                mBarChart_One.setDescription(description);  //表的描述信息
      
                mBarChart_One.setPinchZoom(false);//false只能单轴缩放
                mBarChart_One.setMaxVisibleValueCount(31); //最大显示的个数。超过60个将不再显示
                mBarChart_One.setScaleEnabled(false);     //禁止缩放
                mBarChart_One.setDragEnabled(true);// 是否可以拖拽
                mBarChart_One.setHighlightPerDragEnabled(true);// 拖拽超过图标绘制画布时高亮显示
                mBarChart_One.setDrawGridBackground(false); // 是否显示表格颜色
                mBarChart_One.setGridBackgroundColor(Color.RED); // 表格的的颜色
                mBarChart_One.zoom(1f,1f,0,0);//设置x,y缩放比例
                //X轴 样式
                final XAxis xAxis = mBarChart_One.getXAxis();
                xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
                xAxis.setLabelRotationAngle(60);//柱的下面描述文字  旋转90度
                xAxis.setDrawLabels(true);
                xAxis.setDrawGridLines(false);
                xAxis.setGranularity(20f);//设置最小间隔,防止当放大时,出现重复标签。
                xAxis.setCenterAxisLabels(true);//字体下面的标签 显示在每个直方图的中间
                xAxis.setLabelCount(8,true);//一个界面显示10个Lable。那么这里要设置11个
                xAxis.setTextSize(8f);
      
                mBarChart_One.getAxisRight().setEnabled(false);//右侧不显示Y轴
                mBarChart_One.getAxisLeft().setAxisMinValue(0.0f);//设置Y轴显示最小值,不然0下面会有空隙
                mBarChart_One.getAxisLeft().setDrawGridLines(true);//不设置Y轴网格
                mBarChart_One.getAxisLeft().setTextSize(8f);
      
                //.设置比例图标的显示隐藏
                Legend l = mBarChart_One.getLegend();
                l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
                l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
                l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
                l.setDrawInside(false);
                //样式
                l.setForm(Legend.LegendForm.CIRCLE);
                //字体
                l.setFormSize(10f);
                //大小
                l.setTextSize(13f);
                l.setFormToTextSpace(10f);
                l.setXEntrySpace(10f);
                //模拟数据,Y数据
                for(int i=1;i<=yVals1.size();i++) {
                    mlist.add("10/0"+i);
                }
                IAxisValueFormatter ix=new         MyXAxisValueFormatter1(mlist);
                mBarChart_One.getXAxis().setValueFormatter(ix);
                //设置左上方的色块和文字
                BarDataSet set1;
      
                = new BarDataSet(yVals1, "未达标  已达标");
                set1.setValueTextSize(8f);
                int [] ff=new int[2];    ff[0]=App.getAppContext().getResources().getColor(R.color.blues);
                ff[1]=App.getAppContext().getResources().getColor(R.color.To_be_evaluated);
                set1.setColors(ff);
      
      
                ArrayList<IBarDataSet> dataSets = new ArrayList<>();
                dataSets.add(set1);
                BarData data = new BarData(dataSets);
                data.setValueTextSize(10f);
                data.setBarWidth(0.3f);
                mBarChart_One.setData(data);
            }
      
    • 基本属性介绍

        //设置背景颜色
                mBarChart.setBackgroundColor(getResources().getColor(R.color.colorAccent));
                //设置数值选择的监听
                mBarChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
                    @Override public void onValueSelected(Entry e, Highlight h) {
        
                    }
      
                    @Override public void onNothingSelected() {
      
                    }
                });
                //设置高亮显示
                mBarChart.setHighlightFullBarEnabled(true);
                mBarChart.setDrawValueAboveBar(true);
                //设置支持触控
                mBarChart.setTouchEnabled(true);
                //设置是否支持拖拽
                mBarChart.setDragEnabled(true);
                //设置能否缩放
                mBarChart.setScaleEnabled(true);
                //设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放
                mBarChart.setPinchZoom(true);
                //获取图表右下角的描述性文字,setEnable()默认为true
                mBarChart.getDescription().setEnabled(true);
                Description description=new Description();
                description.setText("description");
                //设置右下角的描述文字
                mBarChart.setDescription(description);
                //设置阴影
                mBarChart.setDrawBarShadow(false);
                //设置所有的数值在图形的上面,而不是图形上
                mBarChart.setDrawValueAboveBar(true);
                //设置最大的能够在图表上显示数字的图数
                mBarChart.setMaxVisibleValueCount(60);
                //设置背景是否网格显示
                mBarChart.setDrawGridBackground(false);
        //X轴的数据格式
                IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(mChart);
                //得到X轴,设置X轴的样式
                XAxis xAxis = mChart.getXAxis();
                //设置位置
                xAxis.setPosition(XAxisPosition.BOTTOM);
                //设置特定的标签类型
                xAxis.setTypeface(mTfLight);
                //设置是否绘制网格线
                xAxis.setDrawGridLines(false);
                //设置最小的区间,避免标签的迅速增多
                xAxis.setGranularity(1f); // only intervals of 1 day
                //设置进入时的标签数量
                xAxis.setLabelCount(7);
                //设置数据格式
                xAxis.setValueFormatter(xAxisFormatter);
      
                IAxisValueFormatter custom = new MyAxisValueFormatter();
      
                YAxis leftAxis = mChart.getAxisLeft();
                leftAxis.setTypeface(mTfLight);
                leftAxis.setLabelCount(8, false);
                leftAxis.setValueFormatter(custom);
                leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART);
                //Sets the top axis space in percent of the full range. Default 10f
                leftAxis.setSpaceTop(15f);
                //设置Y轴最小的值
                leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
      
                YAxis rightAxis = mChart.getAxisRight();
                rightAxis.setDrawGridLines(false);
                rightAxis.setTypeface(mTfLight);
                rightAxis.setLabelCount(8, false);
                rightAxis.setValueFormatter(custom);
                rightAxis.setSpaceTop(15f);
                rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
                //设置图例样式,默认可以显示,设置setEnabled(false);可以不绘制
                Legend l = mChart.getLegend();
                l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
                l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
                l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
                l.setDrawInside(false);
                l.setForm(LegendForm.SQUARE);
                l.setFormSize(9f);
                l.setTextSize(11f);
                l.setXEntrySpace(4f);
                 //设置X轴和Y轴显示的刻度
                private void setData(int count, float range) {
      
                       float start = 1f;
      
                        ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
      
                        for (int i = (int) start; i < start + count + 1; i++) {
                            float mult = (range + 1);
                            float val = (float) (Math.random() * mult);
                            yVals1.add(new BarEntry(i, val));
                        }
        
                        BarDataSet set1;
      
                if (mChart.getData() != null &&
                mChart.getData().getDataSetCount() > 0) {
                    set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0);
                    set1.setValues(yVals1);
                    mChart.getData().notifyDataChanged();
                    mChart.notifyDataSetChanged();
                } else {
                    set1 = new BarDataSet(yVals1, "The year 2017");
                    set1.setColors(ColorTemplate.MATERIAL_COLORS);
      
                    ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
                    dataSets.add(set1);
      
                    BarData data = new BarData(dataSets);
                    data.setValueTextSize(10f);
                    data.setValueTypeface(mTfLight);
                    data.setBarWidth(0.9f);
      
                    mChart.setData(data);
                }
            }
      
    • 基本属性

        //设置背景颜色
                mBarChart.setBackgroundColor(getResources().getColor(R.color.colorAccent));
                //BarChart的点击事件
                mBarChart.setOnClickListener(new View.OnClickListener() {
                    @Override public void onClick(View view) {
      
                    }
                });
                //设置数值选择的监听
                mBarChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
                    @Override public void onValueSelected(Entry e, Highlight h) {
      
                    }
        
                    @Override public void onNothingSelected() {
      
                    }
                });
                //设置高亮显示
                mBarChart.setHighlightFullBarEnabled(true);
                mBarChart.setDrawValueAboveBar(true);
                //设置支持触控
                mBarChart.setTouchEnabled(true);
                //设置是否支持拖拽
                mBarChart.setDragEnabled(true);
                //设置能否缩放
                mBarChart.setScaleEnabled(true);
                //设置true支持两个指头向X、Y轴的缩放,如果为false,只能支持X或者Y轴的当方向缩放
                mBarChart.setPinchZoom(true);
                //获取图表右下角的描述性文字,setEnable()默认为true
                mBarChart.getDescription().setEnabled(true);
                Description description=new Description();
                description.setText("description");
                //设置右下角的描述文字
                mBarChart.setDescription(description);
                //设置阴影
                mBarChart.setDrawBarShadow(false);
                //设置所有的数值在图形的上面,而不是图形上
                mBarChart.setDrawValueAboveBar(true);
                //设置最大的能够在图表上显示数字的图数
                mBarChart.setMaxVisibleValueCount(60);
                //设置背景是否网格显示
                mBarChart.setDrawGridBackground(false);
        //X轴的数据格式
                IAxisValueFormatter xAxisFormatter = new DayAxisValueFormatter(mChart);
                //得到X轴,设置X轴的样式
                XAxis xAxis = mChart.getXAxis();
                //设置位置
                xAxis.setPosition(XAxisPosition.BOTTOM);
                //设置特定的标签类型
                xAxis.setTypeface(mTfLight);
                //设置是否绘制网格线
                xAxis.setDrawGridLines(false);
                //设置最小的区间,避免标签的迅速增多
                xAxis.setGranularity(1f); // only intervals of 1 day
                //设置进入时的标签数量
                xAxis.setLabelCount(7);
                //设置数据格式
                xAxis.setValueFormatter(xAxisFormatter);
      
                IAxisValueFormatter custom = new MyAxisValueFormatter();
      
                YAxis leftAxis = mChart.getAxisLeft();
                leftAxis.setTypeface(mTfLight);
                leftAxis.setLabelCount(8, false);
                leftAxis.setValueFormatter(custom);
                leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART);
                //Sets the top axis space in percent of the full range. Default 10f
                leftAxis.setSpaceTop(15f);
                //设置Y轴最小的值
                leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
      
                YAxis rightAxis = mChart.getAxisRight();
                rightAxis.setDrawGridLines(false);
                rightAxis.setTypeface(mTfLight);
                rightAxis.setLabelCount(8, false);
                rightAxis.setValueFormatter(custom);
                rightAxis.setSpaceTop(15f);
                rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
                //设置图例样式,默认可以显示,设置setEnabled(false);可以不绘制
                Legend l = mChart.getLegend();
                l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
                l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
                l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
                l.setDrawInside(false);
                l.setForm(LegendForm.SQUARE);
                l.setFormSize(9f);
                l.setTextSize(11f);
                l.setXEntrySpace(4f);
                 //设置X轴和Y轴显示的刻度
                private void setData(int count, float range) {
      
                       float start = 1f;
      
                        ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
      
                        for (int i = (int) start; i < start + count + 1; i++) {
                            float mult = (range + 1);
                            float val = (float) (Math.random() * mult);
                            yVals1.add(new BarEntry(i, val));
                        }
      
                        BarDataSet set1;
      
                if (mChart.getData() != null &&
                mChart.getData().getDataSetCount() > 0) {
                    set1 = (BarDataSet) mChart.getData().getDataSetByIndex(0);
                    set1.setValues(yVals1);
                    mChart.getData().notifyDataChanged();
                    mChart.notifyDataSetChanged();
                } else {
                    set1 = new BarDataSet(yVals1, "The year 2017");
                    set1.setColors(ColorTemplate.MATERIAL_COLORS);
      
                    ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
                    dataSets.add(set1);
      
                    BarData data = new BarData(dataSets);
                    data.setValueTextSize(10f);
                    data.setValueTypeface(mTfLight);
                    data.setBarWidth(0.9f);
      
                    mChart.setData(data);
                }
            }
      

    折线图

    效果图
    zxt.png
    • 在XML中加入如下代码

        <com.github.mikephil.charting.charts.LineChart
                android:id="@+id/chart"
                android:layout_width="match_parent"
                android:layout_height="200dp" />
      
    • 主要代码以及数据的设置

        xVals = new ArrayList<>();
        yVals = new ArrayList<>();
        random = new Random();//产生随机数字
      
        for(int i = 0 ; i<12; i++) {
            float x = random.nextInt(10000);//获取value值
            yVals.add(new Entry(x, i));//创建Entry并且添加到Y值的list中,Y轴的值,一个entry代表一个显示的值
            xVals.add( (i+1) + "月");//横坐标显示xxx月
        }
      
        dataSet = new LineDataSet(yVals, "金额");//创建数据集并设置标签
      
        dataSet.setColors(ColorTemplate.COLORFUL_COLORS);//设置数据集显示的颜色,预支颜色模版ColorTemplate,也可以设置单一颜色和colors
      
        dataSet.setHighlightEnabled(true);//设置高亮
        dataSet.setValueTextColor(Color.BLUE);//设置Value值的显示文字颜色,字体大小和字体种类,这里我没有添加对应字体可以自己修改
      
        dataSet.setValueTextSize(10.0f);
        dataSet.setValueTypeface(null);
      
        data = new LineData(xVals, dataSet);//创建LineData,x轴List和Y轴数据集为参数
      
        chart.setData(data);//给图表添加数据
        chart.setDescription("收支状态");//设置图表描述的内容位置,字体等等
        chart.setDescriptionColor(Color.YELLOW);
        chart.setDescriptionTextSize(15f);
        chart.setDescriptionPosition(540, 40);
      
        chart.getXAxis().setPosition(XAxisPosition.BOTTOM);//设置X轴的显示位置,通过XAxisPosition枚举类型来设置
        chart.getXAxis().setAxisMinValue(0.0f);//设置X轴的最小值
        chart.getAxisRight().setEnabled(false);//关闭右边的Y轴,因为默认有两条,左边一条,右边一条,MPAndroidChart中有        setEnabled方法的元素基本上都是使能的作用
        chart.animateY(3000);//动画效果,MPAndroidChart中还有很多动画效果可以挖掘
      
        //当值被选中的时候,执行操作显示一个Toast
        chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
      
                    @Override
                    public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
                        // TODO Auto-generated method stub
                        Toast.makeText(MainActivity.this, String.valueOf(e.getVal()), Toast.LENGTH_SHORT).show();
                    }
      
                    @Override
                    public void onNothingSelected() {
                        // TODO Auto-generated method stub
      
                    }
                });
      
    • 基本属性

        //创建描述信息
        Description description =new Description();
        description.setText("测试图表");
        description.setTextColor(Color.RED);
        description.setTextSize(20);
        lineChart.setDescription(description);//设置图表描述信息
        lineChart.setNoDataText("没有数据熬");//没有数据时显示的文字
        lineChart.setNoDataTextColor(Color.BLUE);//没有数据时显示文字的颜色
        lineChart.setDrawGridBackground(false);//chart 绘图区后面的背景矩形将绘制
        lineChart.setDrawBorders(false);//禁止绘制图表边框的线
        //lineChart.setBorderColor(); //设置 chart 边框线的颜色。
        //lineChart.setBorderWidth(); //设置 chart 边界线的宽度,单位 dp。
        //lineChart.setLogEnabled(true);//打印日志
        //lineChart.notifyDataSetChanged();//刷新数据
        //lineChart.invalidate();//重绘
      
      
      
               //获取此图表的x轴,设置x轴效果
                XAxis xAxis = lineChart.getXAxis();
                xAxis.setEnabled(true);//设置轴启用或禁用 如果禁用以下的设置全部不生效
                xAxis.setDrawAxisLine(true);//是否绘制轴线
                xAxis.setDrawGridLines(true);//设置x轴上每个点对应的线
                xAxis.setDrawLabels(true);//绘制标签  指x轴上的对应数值
                xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置x轴的显示位置
                //xAxis.setTextSize(20f);//设置字体
                //xAxis.setTextColor(Color.BLACK);//设置字体颜色
                //设置竖线的显示样式为虚线
                //lineLength控制虚线段的长度
                //spaceLength控制线之间的空间
                xAxis.enableGridDashedLine(10f, 10f, 0f);
                //xAxis.setAxisMinimum(0f);//设置x轴的最小值
                // xAxis.setAxisMaximum(10f);//设置最大值
                xAxis.setAvoidFirstLastClipping(true);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘
                xAxis.setLabelRotationAngle(10f);//设置x轴标签的旋转角度
                // 设置x轴显示标签数量  还有一个重载方法第二个参数为布尔值强制设置数量 如果启用会导致绘制点出现偏差
                // xAxis.setLabelCount(10);
                // xAxis.setTextColor(Color.BLUE);//设置轴标签的颜色
                // xAxis.setTextSize(24f);//设置轴标签的大小
                // xAxis.setGridLineWidth(10f);//设置竖线大小
                // xAxis.setGridColor(Color.RED);//设置竖线颜色
                // xAxis.setAxisLineColor(Color.GREEN);//设置x轴线颜色
                // xAxis.setAxisLineWidth(5f);//设置x轴线宽度
                // xAxis.setValueFormatter();//格式化x轴标签显示字符
      
      
      
              /**
               * Y轴默认显示左右两个轴线
               */
               //获取右边的轴线
                YAxis rightAxis=lineChart.getAxisRight();
               //设置图表右边的y轴禁用
               rightAxis.setEnabled(false);
               //获取左边的轴线
               YAxis leftAxis = lineChart.getAxisLeft();
               //设置网格线为虚线效果
               leftAxis.enableGridDashedLine(10f, 10f, 0f);
               //是否绘制0所在的网格线 
               leftAxis.setDrawZeroLine(false);
      
      
      
               //设置与图表交互
               lineChart.setTouchEnabled(true); // 设置是否可以触摸
               lineChart.setDragEnabled(true);// 是否可以拖拽
               lineChart.setScaleEnabled(false);// 是否可以缩放 x和y轴, 默认是true
               lineChart.setScaleXEnabled(true); //是否可以缩放 仅x轴
               lineChart.setScaleYEnabled(true); //是否可以缩放 仅y轴
               lineChart.setPinchZoom(true);  //设置x轴和y轴能否同时缩放。默认是否
               lineChart.setDoubleTapToZoomEnabled(true);//设置是否可以通过双击屏幕放大图表。默认是true
               lineChart.setHighlightPerDragEnabled(true);//能否拖拽高亮线(数据点与坐标的提示线),默认是true
               lineChart.setDragDecelerationEnabled(true);//拖拽滚动时,手放开是否会持续滚动,默认是true(false是拖到哪是哪,true拖拽之后还会有缓冲)
               lineChart.setDragDecelerationFrictionCoef(0.99f);//与上面那个属性配合,持续滚动时的速度快慢,[0,1) 0代表立即停止。
      
    zxta.png

    饼状图

    效果图
    bzt.png
    • 在XML中加入如下代码

        <com.github.mikephil.charting.charts.PieChart
                android:id="@+id/chart1"
                android:layout_width="match_parent"
                android:layout_height="300dp"
        />
      
    • 主要代码以及数据的设置

        public class HalfPieChartActivity extends DemoBase {
      
            private PieChart mChart;
      
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
                setContentView(R.layout.activity_piechart_half);
      
                mChart = (PieChart) findViewById(R.id.chart1);
                mChart.setBackgroundColor(Color.WHITE);
      
                moveOffScreen();
      
                mChart.setUsePercentValues(true);
                mChart.getDescription().setEnabled(false);
      
                mChart.setCenterTextTypeface(mTfLight);
                mChart.setCenterText(generateCenterSpannableText());
      
                mChart.setDrawHoleEnabled(true);
                mChart.setHoleColor(Color.WHITE);
      
                mChart.setTransparentCircleColor(Color.WHITE);
                mChart.setTransparentCircleAlpha(110);
      
                mChart.setHoleRadius(58f);
                mChart.setTransparentCircleRadius(61f);
        
                mChart.setDrawCenterText(true);
      
                mChart.setRotationEnabled(false);
                mChart.setHighlightPerTapEnabled(true);
      
                mChart.setMaxAngle(360f); // HALF CHART
                mChart.setRotationAngle(180f);
                mChart.setCenterTextOffset(0, -20);
      
                setData(4, 100);
      
                mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);
      
                Legend l = mChart.getLegend();
                l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
                l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
                l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
                l.setDrawInside(false);
                l.setXEntrySpace(7f);
                l.setYEntrySpace(0f);
                l.setYOffset(0f);
      
                // entry label styling
                mChart.setEntryLabelColor(Color.WHITE);
                mChart.setEntryLabelTypeface(mTfRegular);
                mChart.setEntryLabelTextSize(12f);
            }
      
            private void setData(int count, float range) {
      
                ArrayList<PieEntry> values = new ArrayList<PieEntry>();
      
                for (int i = 0; i < count; i++) {
                    values.add(new PieEntry((float) ((Math.random() * range) + range / 5), mParties[i % mParties.length]));
                }
      
                PieDataSet dataSet = new PieDataSet(values, "Election Results");
                dataSet.setSliceSpace(3f);
                dataSet.setSelectionShift(5f);
      
                dataSet.setColors(ColorTemplate.MATERIAL_COLORS);
                //dataSet.setSelectionShift(0f);
      
                PieData data = new PieData(dataSet);
                data.setValueFormatter(new PercentFormatter());
                data.setValueTextSize(11f);
                data.setValueTextColor(Color.WHITE);
                data.setValueTypeface(mTfLight);
                mChart.setData(data);
      
                mChart.invalidate();
            }
      
            private SpannableString generateCenterSpannableText() {
      
                SpannableString s = new SpannableString("MPAndroidChart\ndeveloped by Philipp Jahoda");
                s.setSpan(new RelativeSizeSpan(1.7f), 0, 14, 0);
                s.setSpan(new StyleSpan(Typeface.NORMAL), 14, s.length() - 15, 0);
                s.setSpan(new ForegroundColorSpan(Color.GRAY), 14, s.length() - 15, 0);
                s.setSpan(new RelativeSizeSpan(.8f), 14, s.length() - 15, 0);
                s.setSpan(new StyleSpan(Typeface.ITALIC), s.length() - 14, s.length(), 0);
                s.setSpan(new ForegroundColorSpan(ColorTemplate.getHoloBlue()), s.length() - 14, s.length(), 0);
                return s;
            }
      
            private void moveOffScreen() {
      
                Display display = getWindowManager().getDefaultDisplay();
                int height = display.getHeight();  // deprecated
      
                int offset = (int)(height * 0.65); /* percent to move */
      
                RelativeLayout.LayoutParams rlParams =
                (RelativeLayout.LayoutParams)mChart.getLayoutParams();
                rlParams.setMargins(0, 0, 0, -offset);
                mChart.setLayoutParams(rlParams);
            }
        }
      
    • 基本属性

        // 设置 pieChart 图表基本属性
        mChart.setUsePercentValues(false);            //使用百分比显示
        mChart.getDescription().setEnabled(false);    //设置pieChart图表的描述
        mChart.setBackgroundColor(Color.YELLOW);      //设置pieChart图表背景色
        mChart.setExtraOffsets(5, 10, 60, 10);        //设置pieChart图表上下左右的偏移,类似于外边距
        mChart.setDragDecelerationFrictionCoef(0.95f);//设置pieChart图表转动阻力摩擦系数[0,1]
        mChart.setRotationAngle(0);                   //设置pieChart图表起始角度
        mChart.setRotationEnabled(true);              //设置pieChart图表是否可以手动旋转
        mChart.setHighlightPerTapEnabled(true);       //设置piecahrt图表点击Item高亮是否可用
        mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);// 设置pieChart图表展示动画效果
      
        // 设置 pieChart 图表Item文本属性
        mChart.setDrawEntryLabels(true);              //设置pieChart是否只显示饼图上百分比不显示文字(true:下面属性才有效果)
        mChart.setEntryLabelColor(Color.WHITE);       //设置pieChart图表文本字体颜色
        mChart.setEntryLabelTypeface(mTfRegular);     //设置pieChart图表文本字体样式
        mChart.setEntryLabelTextSize(10f);            //设置pieChart图表文本字体大小
      
        // 设置 pieChart 内部圆环属性
        mChart.setDrawHoleEnabled(true);              //是否显示PieChart内部圆环(true:下面属性才有意义)
        mChart.setHoleRadius(28f);                    //设置PieChart内部圆的半径(这里设置28.0f)
        mChart.setTransparentCircleRadius(31f);       //设置PieChart内部透明圆的半径(这里设置31.0f)
        mChart.setTransparentCircleColor(Color.BLACK);//设置PieChart内部透明圆与内部圆间距(31f-28f)填充颜色
        mChart.setTransparentCircleAlpha(50);         //设置PieChart内部透明圆与内部圆间距(31f-28f)透明度[0~255]数值越小越透明
        mChart.setHoleColor(Color.WHITE);             //设置PieChart内部圆的颜色
        mChart.setDrawCenterText(true);               //是否绘制PieChart内部中心文本(true:下面属性才有意义)
        mChart.setCenterTextTypeface(mTfLight);       //设置PieChart内部圆文字的字体样式
        mChart.setCenterText("Test");                 //设置PieChart内部圆文字的内容
        mChart.setCenterTextSize(10f);                //设置PieChart内部圆文字的大小
        mChart.setCenterTextColor(Color.RED);         //设置PieChart内部圆文字的颜色
      
        // pieChart添加数据
        setData();
      
        // 获取pieCahrt图列
        Legend l = mChart.getLegend();
        l.setEnabled(true);                    //是否启用图列(true:下面属性才有意义)
        l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);  
        l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT);
        l.setOrientation(Legend.LegendOrientation.VERTICAL);
        l.setForm(Legend.LegendForm.DEFAULT); //设置图例的形状
        l.setFormSize(10);                    //设置图例的大小
        l.setFormToTextSpace(10f);            //设置每个图例实体中标签和形状之间的间距
        l.setDrawInside(false);
        l.setWordWrapEnabled(true);           //设置图列换行(注意使用影响性能,仅适用legend位于图表下面)
        l.setXEntrySpace(10f);                //设置图例实体之间延X轴的间距(setOrientation = HORIZONTAL有效)
        l.setYEntrySpace(8f);                 //设置图例实体之间延Y轴的间距(setOrientation = VERTICAL 有效)
        l.setYOffset(0f);                     //设置比例块Y轴偏移量
        l.setTextSize(14f);                   //设置图例标签文本的大小
        l.setTextColor(Color.parseColor("#ff9933"));//设置图例标签文本的颜色
      
        //pieChart 选择监听
        mChart.setOnChartValueSelectedListener(this);
      
        //设置MARKERVIEW
        CustomMarkerView mv = new CustomMarkerView(this, new PercentFormatter());
        mv.setChartView(mChart);
        mChart.setMarker(mv);
      
        /**
          * 设置饼图的数据
          */
        private void setData() {
            ArrayList<PieEntry> pieEntryList = new ArrayList<PieEntry>();
            ArrayList<Integer> colors = new ArrayList<Integer>();
            colors.add(Color.parseColor("#f17548"));
            colors.add(Color.parseColor("#FF9933"));
            //饼图实体 PieEntry
            PieEntry CashBalance = new PieEntry(70, "现金余额 1500");
            PieEntry ConsumptionBalance = new PieEntry(30, "消费余额 768");
            pieEntryList.add(CashBalance);
            pieEntryList.add(ConsumptionBalance);
            //饼状图数据集 PieDataSet
            PieDataSet pieDataSet = new PieDataSet(pieEntryList, "资产总览");
            pieDataSet.setSliceSpace(3f);           //设置饼状Item之间的间隙
            pieDataSet.setSelectionShift(10f);      //设置饼状Item被选中时变化的距离
            pieDataSet.setColors(colors);           //为DataSet中的数据匹配上颜色集(饼图Item颜色)
            //最终数据 PieData
            PieData pieData = new PieData(pieDataSet);
            pieData.setDrawValues(true);            //设置是否显示数据实体(百分比,true:以下属性才有意义)
            pieData.setValueTextColor(Color.BLUE);  //设置所有DataSet内数据实体(百分比)的文本颜色
            pieData.setValueTextSize(12f);          //设置所有DataSet内数据实体(百分比)的文本字体大小
            pieData.setValueTypeface(mTfLight);     //设置所有DataSet内数据实体(百分比)的文本字体样式
            pieData.setValueFormatter(new PercentFormatter());//设置所有DataSet内数据实体(百分比)的文本字体格式
            mChart.setData(pieData);
            mChart.highlightValues(null);
            mChart.invalidate();                    //将图表重绘以显示设置的属性和数据
        }
      

    相关文章

      网友评论

          本文标题:2018-03-08

          本文链接:https://www.haomeiwen.com/subject/nbwefftx.html