自版本v3.0.0以来,图表中的标记(弹出式视图)由IMarker界面表示。
IMarker界面
此界面允许您创建在图表中突出显示的条目上显示的自定义标记视图。界面提供的方法如下:
天下事有难易乎? 为之,则难者亦易矣。
注意:仅针对API级别11(Android 3.0.x)和更高版本的动画。
在较低的Android版本上,动画将不会执行(但不会崩溃)。
所有图表类型支持可用于以令人敬畏的方式创建/构建图表的动画。存在三种不同类型的动画方法,分别对x或y轴进行动画化:
animateXY(int xDuration, int yDuration):动画水平和垂直轴,导致左/右底部/顶部积聚。
mChart.animateX(3000); //动画水平3000毫秒
//或:
mChart.animateY(3000); //动画垂直3000毫秒
//或:
mChart.animateXY(3000, 3000);//动画水平和垂直3000毫秒
如果animate(…)(任何一种)被调用,则不需要进一步调用invalidate()来刷新图表。
该库具有各种修改视口的方法(图表上可见,视图的目的)。请注意,这些方法只适用的LineChart,BarChart,ScatterChart和CandleStickChart。
下面提到的方法由Chart课程提供。修改视口的另一种方法是通过ViewPortHandler直接访问它(没有图表提供的内部安全性)。这仅适用于熟悉API的高级用户。
请注意,修改视口的所有方法需要在Chart 设置数据后调用。
自v1.6.3起可用 - 不断改进。
为了将新数据添加到图表或动态删除数据,有多种方法可以将Entry对象从现有对象DataSet添加或删除或从现有ChartData对象添加或删除DataSet对象。
Class DataSet(和所有子类):
Class ChartData(和所有子类):
默认情况下,所有图表类型都支持图例,并在为图表设置数据后自动生成和绘制图例。Legend通常由通过一个标签的形式/形状表示多个条目的每一个。
自动生成的图例包含的条目数取决于不同颜色(跨所有DataSet对象)以及DataSet标签的数量。标签Legend取决于为DataSet图表中的已使用对象设置的标签。如果没有DataSet指定对象的标签,图表将自动生成。如果使用多种颜色DataSet,那么这些颜色是分组的,只能由(属于)一个标签描述。
对于自定义Legend,您可以Legend使用以下getLegend()方法从图表中检索对象:
Legend legend = chart.getLegend();
在第1章中提到了适用于所有图表类型的入门常规图表设置和样式方法。本章重点介绍各种图表类型的具体设置。
本节重点介绍此库适用于所有Chart类型的的设置和样式。
invalidate():在图表上调用此方法将刷新(重绘)。这是为了使在图表上执行的更改生效而需要的。
notifyDataSetChanged():让图表知道底层数据已经改变,并执行所有必要的重新计算(偏移,图例,最大值,最小值,…)。特别是在动态添加数据时尤其如此。
setLogEnabled(boolean enabled):将其设置为true将激活图表logcat输出。启用此功能对于性能不利,如果不需要,请保持禁用。
一般图表样式
在版本v3.0.0中引入,此界面允许在绘制之前自定义样式XAxis和YAxis值。
所有需要对轴进行自定义格式化的值都是创建一个实现IAxisValueFormatter接口的类,如下所示。该格式器用于始终将轴的值格式化为1位十进制数字。
public class MyYAxisValueFormatter implements IAxisValueFormatter {
private DecimalFormat mFormat;
public MyAxisValueFormatter() {
//格式值为1位十进制数
mFormat = new DecimalFormat("###,###,##0.0");
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
// “value”表示标签在轴上的位置(x或y)
return mFormat.format(value) + " $";
}
/** 只有返回数字时才需要这个,否则返回0 */
@Override
public int getDecimalDigits() { return 1; }
}
自v1.6.2起可用 - 在v2.1.4中更改(改进)
该IValueFormatter可用于创建自定义界面的格式化程序类,允许DataSets在绘制图形之前以特定方式格式化图表中的值(从)。
对于使用IValueFormatter,只需创建一个新类,并让它实现接口并返回任何你想要显示的getFormattedValue(…)方法。
public class MyValueFormatter implements IValueFormatter {
private DecimalFormat mFormat;
public MyValueFormatter() {
mFormat = new DecimalFormat("###,###,##0.0"); // 使用一个小数
}
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
//在这里写你的逻辑
return mFormat.format(value) + " $"; //例如附加一个美元符号
}
}
自版本v1.4.0以来,ColorTemplate不再是需要负责在以前版本中设置颜色的对象。然而,它仍然保留所有预定义的颜色阵列(例如,ColorTemplate.VORDIPLOM_COLORS并提供将颜色从资源(资源整数)转换为“真实”颜色的便利方法。
而取代ColorTemplate,现在可以直接通过DataSet对象指定颜色,这允许为每个DataSet对象分别设计样式。
在这个简短的例子中,我们有两个不同的LineDataSet对象代表了两家公司的季度收入(以前在“ 设置数据”教程中提到),我们现在要设置不同的颜色。