MPAndroidChart_饼图的那些事

MPAndroidChart攻略——PieChartt的点点滴滴。

MPAndroidChart_折线图的那些事

MPAndroidChart_饼图的那些事

MPAndroidChart_动态柱状图

MPAndroidChart_水平条形图的那些事

MPAndroidChart_并列柱状图,及如何实现点击隐藏掉不需要的条目。

MPAndroidChart_雷达图的那些事及自定义标签颜色

目录

从简易Demo开始

1. 百分比的设置

2. 标签的设置(标签就是扇形图里的文字)

3. 饼心的设置

4. 透明圆的设置(即饼心旁边的的圆环)

5. 设置图表变化监听

6. 设置折线饼图

7. 設置突出时的间距

8. 设置图例

9. 设置动画

      -1. x轴动画

      -2. y轴动画 

      -3. xy轴动画

10. 其他属性的设置

从简易Demo开始
我们先做一个简易的饼图,然后开始对它进行丰富,完成对常用API的熟悉。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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.PieChart
        android:id="@+id/chart"
        android:layout_width="match_parent"
        android:layout_height="500dp" />
 
</LinearLayout>
public class MainActivity extends AppCompatActivity {
    private PieChart chart;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        chart=findViewById(R.id.chart);
        info();
    }
    private void info(){
        ArrayList<PieEntry> entries=new ArrayList<>();
        entries.add(new PieEntry(10,"晴天"));
        entries.add(new PieEntry(30,"雨天"));
        entries.add(new PieEntry(40,"阴天"));
        entries.add(new PieEntry(30,"多云转阴"));
        setData(entries);
    }
    private void setData(ArrayList<PieEntry> list){
        //label为""的话,图例下面也就是空白
        PieDataSet dataSet=new PieDataSet(list,"Petterp");
        ArrayList<Integer> colors=new ArrayList<>();
        for (int a:ColorTemplate.VORDIPLOM_COLORS){
            colors.add(a);
        }
        dataSet.setColors(colors);
        PieData data=new PieData(dataSet);
        chart.setData(data);
        chart.highlightValue(null);
        chart.invalidate();
    }
}
效果如下

看起来挺简单吧,接下来我们就开始对它的常用方法进行熟悉吧。

 

百分比的设置
 dataSet.setValueFormatter(new PercentFormatter());
 dataSet.setValueTextSize(30f);
 dataSet.setValueTextColor(Color.BLACK);


 

 标签的设置(标签就是扇形图里的文字)
//标签的颜色
chart.setEntryLabelColor(Color.BLUE);
//标签的大小
chart.setEntryLabelTextSize(20f);
//设置是否隐藏标签
 chart.setDrawEntryLabels(false);


 

 饼心的设置
        //显示饼心,默认显示
        chart.setDrawHoleEnabled(true);
        //设置饼心的颜色
        //设置饼心的半径,默认为50%
        chart.setHoleRadius(50f);
        chart.setHoleColor(Color.WHITE);
        //是否显示在饼心的文本
        chart.setDrawCenterText(true);
        //设置饼心显示的文字
        chart.setCenterText(new SpannableString("Petterp"));
        //设置饼心字体大小
        chart.setCenterTextSize(20);
        //设置中心文本的偏移量
        chart.setCenterTextOffset(30,0);


 

 透明圆的设置(即饼心旁边的的圆环)
         //启用透明圆
        chart.setDrawHoleEnabled(true);
        //设置透明圆的半径,默认为比饼心的半径大5%
        chart.setTransparentCircleRadius(60);
        //设置透明圆的透明度,默认为100,255=不透明,0=全透明
        chart.setTransparentCircleAlpha(120);
        //设置透明圆的颜色
        chart.setTransparentCircleColor(Color.WHITE);


 

 设置图表变化监听
        //设置图表变化监听
        chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry e, Highlight h) {
                Toast.makeText(Main2Activity.this, "我被点击了", Toast.LENGTH_SHORT).show();
            }
 
            @Override
            public void onNothingSelected() {
 
            }
        });


 

 设置折线饼图
        //设置折线的颜色
        dataSet.setValueLineColor(Color.BLACK);
        //设置数据线距离图像内部园心的距离,以百分比来计算
        dataSet.setValueLinePart1OffsetPercentage(100f);
        //当valuePosition在外部时,表示行前半部分的长度(即折线靠近圆的那端长度)
        dataSet.setValueLinePart1Length(0.5f);
        ///当valuePosition位于外部时,表示行后半部分的长度*(即折线靠近百分比那端的长度)
        dataSet.setValueLinePart2Length(0.1f);
        //设置Y值的位置在圆外
        dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);


 

 設置突出时的间距
         //选中时突出的长度
        dataSet.setSelectionShift(30);
        //饼块之间的间隔
        dataSet.setSliceSpace(10f);


 

设置图例
Legend legend=chart.getLegend();
        //设置图例的实际对齐方式
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        //设置图例水平对齐方式
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        //设置图例方向
        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        //设置图例是否在图表内绘制
        legend.setDrawInside(false);
        //设置水平图例之间的空间
        legend.setXEntrySpace(5f);
        //设置垂直轴上图例条目间的空间
        legend.setYEntrySpace(0F);
        //设置x轴偏移量
        legend.setXOffset(50f);
        //设置此轴上的标签使用的y轴偏移量。对于图例,*高偏移量意味着整个图例将被放置在离顶部*更远的地方。
        legend.setYOffset(0f);
        //设置字体大小
        legend.setTextSize(20f);


 

设置动画
      x轴动画
//默认动画  
 chart.animateX(2000);


 

 

      y轴动画 
//默认动画
chart.animateY(2000);


 

 
xy轴动画
//默认动画
chart.animateXY(2000,2000);

 

 

其他属性的设置
        //设置图表偏移量
        chart.setExtraOffsets(5f, 5f, 5f, 5f);
        //设置可触摸
        chart.setRotationEnabled(true);
        //*减速摩擦系数为[o];1] interval,数值越高*表示速度下降越慢,例如设置为o,则*立即停止。1为无效值,将自动转换为*0.999f。
        chart.setDragDecelerationFrictionCoef(0.9f);
 

最后附上完整代码

public class MainActivity extends AppCompatActivity {
    private PieChart chart;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        chart = findViewById(R.id.chart);
        info();
    }
 
    private void info() {
        //启动以百分比绘制
        chart.setUsePercentValues(true);
        chart.setEntryLabelColor(Color.BLUE);
        chart.setEntryLabelTextSize(20f);
 
        //显示饼心,默认显示
        chart.setDrawHoleEnabled(true);
        //设置饼心的颜色
        chart.setHoleColor(Color.WHITE);
        //设置饼心的半径,默认为50%
        chart.setHoleRadius(50f);
        //是否显示在饼心的文本
        chart.setDrawCenterText(true);
        //设置饼心显示的文字
        chart.setCenterText(new SpannableString("Petterp"));
        //设置饼心字体大小
        chart.setCenterTextSize(20);
        //设置中心文本的偏移量
        chart.setCenterTextOffset(30, 0);
 
        //设置透明圆的半径,默认为比饼心的半径大5%
        chart.setTransparentCircleRadius(60);
        //设置透明圆的透明度,默认为100,255=不透明,0=全透明
        chart.setTransparentCircleAlpha(120);
        //设置透明圆的颜色
        chart.setTransparentCircleColor(Color.WHITE);
 
        //设置图表变化监听
        chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
            @Override
            public void onValueSelected(Entry e, Highlight h) {
                Toast.makeText(Main2Activity.this, "我被点击了", Toast.LENGTH_SHORT).show();
            }
 
            @Override
            public void onNothingSelected() {
 
            }
        });
 
        Legend legend = chart.getLegend();
        //设置图例的实际对齐方式
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
        //设置图例水平对齐方式
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
        //设置图例方向
        legend.setOrientation(Legend.LegendOrientation.VERTICAL);
        //设置图例是否在图表内绘制
        legend.setDrawInside(false);
        //设置水平图例之间的空间
        legend.setXEntrySpace(5f);
        //设置垂直轴上图例条目间的空间
        legend.setYEntrySpace(0F);
        //设置x轴偏移量
        legend.setXOffset(50f);
        //设置此轴上的标签使用的y轴偏移量。对于图例,*高偏移量意味着整个图例将被放置在离顶部*更远的地方。
        legend.setYOffset(0f);
        //设置字体大小
        legend.setTextSize(20f);
 
        //设置x轴动画
//        chart.animateX(2000);
//        //设置y轴动画
//        chart.animateY(2000);
        //设置xy轴动画
        chart.animateXY(2000, 2000);
 
        //设置图表偏移量
        chart.setExtraOffsets(5f, 5f, 5f, 5f);
        //设置可触摸
        chart.setRotationEnabled(true);
        //*减速摩擦系数为[o];1] interval,数值越高*表示速度下降越慢,例如设置为o,则*立即停止。1为无效值,将自动转换为*0.999f。
        chart.setDragDecelerationFrictionCoef(0.9f);
 
        ArrayList<PieEntry> entries = new ArrayList<>();
        entries.add(new PieEntry(10, "晴天"));
        entries.add(new PieEntry(30, "雨天"));
        entries.add(new PieEntry(40, "阴天"));
        entries.add(new PieEntry(30, "多云转阴"));
        setData(entries);
    }
 
    private void setData(ArrayList<PieEntry> list) {
        PieDataSet dataSet = new PieDataSet(list, "Petterp");
        ArrayList<Integer> colors = new ArrayList<>();
        for (int a : ColorTemplate.VORDIPLOM_COLORS) {
            colors.add(a);
        }
 
        //显示百分比号
        dataSet.setValueFormatter(new PercentFormatter());
        dataSet.setValueTextSize(20f);
        dataSet.setValueTextColor(Color.BLACK);
        dataSet.setColors(colors);
 
        //设置折线饼图
        //设置折线的颜色
        dataSet.setValueLineColor(Color.BLACK);
        //设置数据线距离图像内部园心的距离,以百分比来计算
        dataSet.setValueLinePart1OffsetPercentage(100f);
        //当valuePosition在外部时,表示行前半部分的长度(即折线靠近圆的那端长度)
        dataSet.setValueLinePart1Length(0.5f);
        ///当valuePosition位于外部时,表示行后半部分的长度*(即折线靠近百分比那端的长度)
        dataSet.setValueLinePart2Length(0.1f);
        //设置Y值的位置在圆外
        dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE);
 
        //选中时突出的长度
        dataSet.setSelectionShift(30);
        //饼块之间的间隔
        dataSet.setSliceSpace(10f);
        
        PieData data = new PieData(dataSet);
        chart.setData(data);
        //取消高亮显示
        chart.highlightValue(null);
        chart.invalidate();
    }
}
 

好了,以上就是饼图常用的方法,以后开发中,如果有新的使用方法及修正之处,也会及时更新的。如果有帮到你的地方,不胜荣幸。 
————————————————
版权声明:本文为CSDN博主「petterp」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/petterp/article/details/85982395

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值