22. ViewPortHandler
ViewPortHandler负责处理图表的视窗。也就是说它负责图表视图中的展示给用户的那部分内容。包括图表位移,缩放级别,图表大小和绘制区域以及当前偏移量。ViewPortHandler允许我们访问以上提到的所有书属性并修改它。
和通过Chart类修改视窗不一样的是,通过ViewPortHandler直接修改可见取悦并不是完全安全的。即使你对API比较熟悉你也需要很小心的使用它。不恰当的使用可能会导致意想不到的结果。然而,ViewPortHandler提供了很多高阶的方法来修改视窗。
22.1 获取实例
可以通过如下方式获取实例:
1 | ViewPortHandler handler = chart.getViewPortHandler(); |
22.2 缩放&位移
方法 | 使用 |
---|---|
getScaleX() | 返回X轴上的缩放级别 |
getScaleY() | 返回Y轴上的缩放级别 |
getTransX() | 返回X轴方向上的位移 |
getTransY() | 返回Y轴方向上的位移 |
**** | |
### 22.3 图表尺寸&内容 | |
方法 | 使用 |
—– | —— |
getChartWidth() | 返回图表的宽度 |
getChartHeight() | 返回图表的高度 |
getContentRect() | 返回一个RectF对象表示当前的内容区域 |
更多方法请查阅JavaDoc或者学习API |
23. FillFormatter
FillFormatter接口允许自定义LineDataSet的填充行应该在哪里结束。 所有需要做的都是创建一个新类并实现FillFormatter接口。 使用:
1 | public float getFillLinePosition(LineDataSet dataSet, LineDataProvider provider) |
用于实现自定义逻辑的接口的方法,该自定义逻辑计算单个LineDataSet的填充行的结束点。
创建一个类实现该接口:
1 | public class MyCustomFillFormatter implements FillFormatter { |
然后把自定义的formatter设置到LineDataSet:
1 | lineDataSet.setFillFormatter(new MyCustomFillFormatter()); |
查看DefaultFillFormatter的实现
24. ProGuard
使用Proguard,需要添加如下配置:
1 | -keep class com.github.mikephil.charting.** { *; } |
如果使用proguard但是不配置以上规则,动画会失效。
Realm.io对应配置:
1 | -dontwarn io.realm.** |
25. Realm.io数据库集成
请移步官方MPAndroidChart-Realm来了解如何从Realm.io数据库中提取数据填充MPAndroidChart。
具体操作指南请查阅此处
26. 自定义DataSets
从版本v.2.2.0开始,MP AndroidChart允许你创建自定义的DataSets并在图表中使用它们。
26.1 必需操作
- 创建自定义类(如:CustomDataSet)
- 继承BaseDataSet< ? extends Entry>
- 根据需求实现对应的IDataSet接口。如IBarDataSet
- 实现接口对应的方法并返回你期望的结果
26.2 示例
创建一个BarDataSet供BarChart使用:
1 | public class CustomBarDataSet extends BaseDataSet<BarEntry> implements IBarDataSet { |
创建CustomBarDataSet后实现所有接口需要实现的方法,然后它就可以像BarDataSet一样在所有的BarChart中使用了。
27. 其他方法
27.1 图表内容
方法 | 使用 |
---|---|
clear() | 清空图表中的所有数据(通过设置数据对象为null实现)。调用invalidate()刷新数据 |
clearValues() | 清空图表中的数据集,X轴上数据不做修改 |
isEmpty() | 判断图表中数据是否为空 |
** | |
### 27.2 好用的Getter方法 | |
方法 | 使用 |
—— | —— |
getData() | 返回图表中的Data对象 |
getViewPortHandler() | 返回ViewPortHandler对象 |
getRenderer() | 返回负责绘制图表的DataRender对象 |
getCenter() | 返回整个图表的中心点. |
getCenterOffsets() | 返回图表绘制区域的中心点 |
getPercentOfTotal(float value) | 返回提供的值构成图表内总和的百分比. |
getYMin() | 返回Y轴最小值 |
getYMax() | 返回Y轴最大值 |
getLowestVisibleXIndex() | 返回X轴方向上最小可见索引 |
getHighestVisibleXIndex() | 返回X轴方向上最大可见索引 |
** | |
### 27.3 更多Chart类方法 | |
方法 | 使用 |
—— | —— |
saveToGallery(String title) | 将当前图表状态以图片的形式保存到图库。记得添加”WRITE_EXTERNAL_STORAGE”权限. |
saveToPath(String title, String pathOnSD) | 将当前图表状态以图片的形式保存到指定路径。记得添加”WRITE_EXTERNAL_STORAGE”权限. |
getChartBitmap() | 将当前图表状态以Bitmap的形式返回. |
setHardwareAccelerationEnabled(boolean enabled) | 启用/禁用图表绘制硬件加速, 仅针对API级别11+的设备. |