MPAndroidChart3使用详解6:Legend(图例)

目录

 

1 方法总览

2 使用说明

2.1 设置图例形状

2.2 设置图例条目的排列方向

2.3 设置图例内容的方向

2.4 设置图例的摆放位置

2.5 设置自定义图例

2.6 设置格外图例

2.7 设置启用自动换行


1 方法总览

返回类型

方法

描述

void

setForm(Legend.LegendForm shape

设置形状,默认为正方形

enum LegendForm {

NONE,    // 不绘制形状

EMPTY,   // 不绘制形状,但留下空间

DEFAULT, // 默认,为圆形

SQUARE,  // 正方形

CIRCLE,  // 圆形

LINE     // 线性

}

void

setFormSize(float size)

设置图形大小(单位:dp),默认8dp

void

setFormLineWidth(float size)

设置图形线宽(单位:dp),默认3dp

void

setFormToTextSpace(float space)

设置图形与文本的间隔(单位:dp),默认5dp

void

setFormLineDashEffect(

    float intervals[],

    float phase)

设置虚线,第一个参数是间隔值数组,第二个参数是这个间隔值数组的偏移量

void

setHorizontalAlignment(

Legend.LegendHorizontalAlignment value)

设置水平线上的对齐方式。默认左对齐

enum LegendHorizontalAlignment {

LEFT,    // 左

CENTER,  // 中

RIGHT    // 右

}

void

setVerticalAlignment(

Legend.LegendVerticalAlignment value)

设置垂直线上的对齐方式,默认下对齐

enum LegendVerticalAlignment {

TOP,     // 上

CENTER,  // 中

BOTTOM   // 下

}

void

setOrientation(

Legend.LegendOrientation value)

设置图例条目的排列方向,默认水平

enum LegendOrientation

HORIZONTAL, // 水平

VERTICAL    // 垂直

}

void

setDrawInside(boolean value)

设置是否绘制在内部,默认为false

void

setPosition(

Legend.LegendPosition newValue)

设置位置(弃用),默认图表左下

enum LegendDirection {(弃用)

RIGHT_OF_CHART, // 右侧

RIGHT_OF_CENTER,  // 右侧中间

RIGHT_OF_CHART_INSIDE, // 右侧内部

LEFT_OF_CHART,  // 左侧

LEFT_OF_CHART_CENTER, // 左侧中间

LEFT_OF_CHART_INSIDE,  // 左侧内部

BELOW_CHART_LEFT, // 左下

BELOW_CHART_RIGHT,  // 右下

BELOW_CHART_CENTER, // 中下

ABOVE_CHART_LEFT,  // 左上

ABOVE_CHART_RIGHT, // 右上

ABOVE_CHART_CENTER,  // 中上

PIECHART_CENTER // 饼图中间

}

void

setDirection(

Legend.LegendDirection pos)

设置条目内容的方向,默认从左到右

enum LegendDirection {

LEFT_TO_RIGHT, // 左到右

RIGHT_TO_LEFT  // 右到左

}

void

setXEntrySpace(float space)

设置X轴上条目的间隔,默认为6dp

void

setYEntrySpace(float space)

设置Y轴上条目的间隔,默认为0dp

void

setExtra(List<LegendEntry> entries)

设置额外的图例

void

setExtra(LegendEntry[] entries)

设置额外的图例

void

setExtra(

    List<Integer> colors,

    List<String> lables)

设置额外的图例(弃用)

void

setExtra(

    Integer[] colors,

    String[] lables)

设置额外的图例

void

setCustom(List<LegendEntry> entries)

设置自定义图例

void

setCustom (LegendEntry[] entries)

设置自定义图例

void

setWordWrapEnable(boolean enabled)

设置是否启用自动换行,默认为false

Void

calculateDimensions(

    Paint labelpaint, 

    ViewPortHandler viewPortHandler)

计算图表尺寸

void

setStackSpace(float space)

 

void

setMaxSizePecent(float maxSize)

设置最大图例的百分比(相对整个图表大小),默认0.95(95%)

void

resetCustom()

 

Legend.LegendForm

getForm()

获取当前图形,默认为正方形

float

getFormSize()

获取图形大小(单位:dp),默认8dp

float

getFormLineWidth()

获取图形线宽(单位:dp),默认3dp

float

getFormToTextSpace()

获取图形和文字间的间隔,默认5dp

DashPathEffect

getFormLineDashEffect()

获取虚线对象

Legend

.LegendHorizontalAlignment

getHorizontalAlignment()

获取水平线上的对齐方式。默认左对齐

Legend

.LegendVerticalAlignment

getVerticalAlignment()

获取垂直线上的对齐方式,默认下对齐

Legend

.LegendOrientation

getOrientation()

获取图例条目的排列方向,默认水平

boolean

isDrawInsideEnabled()

是否绘制在内部,默认为false

Legend

.LegendPosition

getPosition()

获取位置(弃用),默认图表左下

Legend

.LegendDirection

getDirection()

获取条目内容的方向,默认从左到右

float

getXEntrySpace()

获取X轴上条目的间隔,默认为6dp

float

getYEntrySpace()

获取Y轴上条目的间隔,默认为0dp

LegendEntry[]

getExtra()

获取额外图例

int[]

setExtraColors()

获取额外图例颜色(弃用)

LegendEntry[]

setExtraEntries()

获取额外图例

String[]

getExtraLables()

获取额外图例文本(弃用)

boolean

isWordWrapEnable()

是否启用自动换行,默认为false

List<Boolean>

getCalculatedLabelBreakPoint()

 

List<Fsize>

getCalculatedLabelSizes()

 

List<Fsize>

getCalculatedLineSizes()

 

int[]

getColors()

获取图例颜色(弃用)

String[]

getLabels()

获取图例文本(弃用)

float

getMaxinumEntryHeight(Paint p)

 

float

getMaxinumEntryWidth (Paint p)

 

float

getStacklSpace()

 

boolean

isLegendCustom()

 

2 使用说明

       这里我只单独讲解Legend的应用,因此,除了设置模拟数据外,其他属性默认,以免混淆。同时为了让读者更加清晰,我会详细说明整个实现过程。

2.1 设置图例形状

①  避免绘制图形

legend.setForm(Legend.LegendForm.NONE);

②  不绘制图形,但留空间

legend.setForm(Legend.LegendForm.EMPTY);

③  绘制默认图形,默认为圆形

legend.setForm(Legend.LegendForm.DEFAULT); 

④  绘制圆形

legend.setForm(Legend.LegendForm.CIRCLE);

⑤  绘制正方形,不设置setForm方法则绘制该图形

legend.setForm(Legend.LegendForm.SQUARE);

⑥  绘制线条

legend.setForm(Legend.LegendForm.LINE);

问题:

      这里没有长方形的枚举值,那如果我们需要绘制长方形怎么办呢?

解答:

      通过绘制线条加上更改图形线条宽度即可。

⑦  长方形

legend.setForm(Legend.LegendForm.LINE); // 线
legend.setFormSize(14f); // 图形大小
legend.setFormLineWidth(9f);  // 图形线宽

⑧ 设置虚线图形

legend.setForm(Legend.LegendForm.LINE); // 线
legend.setFormSize(32f); // 图形大小
// 设置虚线
legend.setFormLineDashEffect(
        new DashPathEffect(new float[]{12f,12f,12f}, 10f));

       第一个参数是一个间隔值数组,第二个参数是这个间隔值数组的偏移量。从上图可以看到,我的间隔数组元素都是一样为12,而第一段却很短,这就是我第二个参数传入10导致的,如果为0,从头开始每段都会一样长,除非最后一段显示不全。而如果第一个参数的间隔值数组里面的值都为0,那效果就是一条实线了。

2.2 设置图例条目的排列方向

       默认是水平排列,这里我改为垂直排列

legend.setOrientation(Legend.LegendOrientation.VERTICAL);

效果对比:

 

2.3 设置图例内容的方向

       默认是从左到右,这里我改为从右到左

效果对比:

2.4 设置图例的摆放位置

        这里我以水平线上居中,垂直线上居上为栗子

// 水平:居中
legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
// 垂直:居上
legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);

>> 效果图:

 

2.5 设置自定义图例

        总共有两个重载方法,举个栗子。

List<LegendEntry> entries = new ArrayList<>();
entries.add(new LegendEntry());
entries.add(new LegendEntry(
        "A",
        Legend.LegendForm.LINE,
        14f,
        9f,
        null,
        Color.RED)
);
entries.add(new LegendEntry(
        "B",
        Legend.LegendForm.CIRCLE,
        14f,
        0f,
        null,
        Color.GREEN)
);
entries.add(new LegendEntry(
        "C",
        Legend.LegendForm.SQUARE,
        14f,
        0f,
        null,
        Color.BLUE));

legend.setCustom(entries);

>> 效果图:

2.6 设置格外图例

        总共有四个重载方法,自定义图例上采用集合的参数,我这里就用数组参数栗子吧。

legend.setExtra(new LegendEntry[]{
        new LegendEntry(),
        new LegendEntry(
                "A",
                Legend.LegendForm.LINE,
                14f,
                9f,
                null,
                Color.RED),
        new LegendEntry(
                "B",
                Legend.LegendForm.CIRCLE,
                14f,
                0f,
                null,
                Color.GREEN),
        new LegendEntry(
                "C",
                Legend.LegendForm.SQUARE,
                14f,
                0f,
                null,
                Color.BLUE)
});

>> 效果图:

2.7 设置启用自动换行

        默认是不启用的,我把图例的文字加长点,然后把图表整体大小调小点,把屏幕背景设置为灰色,我们来看看效果。

>> 效果图:

        是不是发现,我们的图例超出了图表的整体大小,后面的文字都看不到了?接下来我们启用自动换行来看看效果如何。

legend.setWordWrapEnabled(true);

>> 效果图:

注:我在查看文档的时候,有说明这个属性只支持如下三个位置相关常量。

       然而我好奇地尝试了其他的位置相关常量:ABOVE_CHART_CENTER,ABOVE_CHART_LEFT,ABOVE_CHART_RIGHT,也是能起到作用。我猜想可能之后做了修改遗忘了更改文档。

 

  • 24
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
MPAndroidChart是一款功能强大的Android图表库,它支持多种类型的图表,如折线图、柱状图、饼图、散点图等,并且可以进行多种自定义设置和交互操作。以下是MPAndroidChart使用详解: 1. 导入库 在项目的build.gradle文件中添加以下依赖: ``` dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } ``` 2. 添加布局 在布局文件中添加一个空的布局,用于显示图表: ``` <LinearLayout android:id="@+id/chart_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" /> ``` 3. 初始化图表 在代码中获取布局并初始化图表: ``` // 获取布局 LinearLayout chartLayout = findViewById(R.id.chart_layout); // 创建图表 LineChart chart = new LineChart(this); // 添加到布局中 chartLayout.addView(chart); ``` 4. 设置数据 设置图表的数据源: ``` List<Entry> entries = new ArrayList<>(); entries.add(new Entry(0, 2)); entries.add(new Entry(1, 4)); entries.add(new Entry(2, 6)); entries.add(new Entry(3, 8)); entries.add(new Entry(4, 10)); LineDataSet dataSet = new LineDataSet(entries, "Label"); LineData lineData = new LineData(dataSet); chart.setData(lineData); ``` 5. 自定义样式 可以对图表进行多种自定义设置,如图例、坐标轴、标签等: ``` // 设置图例 Legend legend = chart.getLegend(); legend.setEnabled(false); // 设置X轴 XAxis xAxis = chart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); // 设置Y轴 YAxis yAxis = chart.getAxisLeft(); yAxis.setAxisMinimum(0f); yAxis.setAxisMaximum(12f); yAxis.setGranularity(1f); yAxis.setValueFormatter(new ValueFormatter() { @Override public String getFormattedValue(float value) { return String.valueOf((int) value); } }); // 设置标签 chart.getDescription().setEnabled(false); ``` 6. 添加交互操作 可以为图表添加多种交互操作,如缩放、拖动等: ``` // 缩放 chart.setScaleEnabled(true); chart.setPinchZoom(true); // 拖动 chart.setDragEnabled(true); ``` 以上就是MPAndroidChart使用详解,希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Homilier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值