MPAndroidChart Wiki(译)~Part 6

684 阅读3分钟

22. ViewPortHandler

ViewPortHandler负责处理图表的视窗。也就是说它负责图表视图中的展示给用户的那部分内容。包括图表位移,缩放级别,图表大小和绘制区域以及当前偏移量。ViewPortHandler允许我们访问以上提到的所有书属性并修改它。

和通过Chart类修改视窗不一样的是,通过ViewPortHandler直接修改可见取悦并不是完全安全的。即使你对API比较熟悉你也需要很小心的使用它。不恰当的使用可能会导致意想不到的结果。然而,ViewPortHandler提供了很多高阶的方法来修改视窗。

22.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接口。 使用:

public float getFillLinePosition(LineDataSet dataSet, LineDataProvider provider)

用于实现自定义逻辑的接口的方法,该自定义逻辑计算单个LineDataSet的填充行的结束点。

创建一个类实现该接口:

public class MyCustomFillFormatter implements FillFormatter {

    @Override
    public float getFillLinePosition(LineDataSet dataSet, LineDataProvider dataProvider) {

        float myDesiredFillPosition = ...;
        // put your logic here...

        return myDesiredFillPosition;
    }
}

然后把自定义的formatter设置到LineDataSet:

lineDataSet.setFillFormatter(new MyCustomFillFormatter());

查看DefaultFillFormatter的实现


24. ProGuard

使用Proguard,需要添加如下配置:

-keep class com.github.mikephil.charting.** { *; }

如果使用proguard但是不配置以上规则,动画会失效。 Realm.io对应配置:

-dontwarn io.realm.**

其他ProGuard信息


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使用:

public class CustomBarDataSet extends BaseDataSet<BarEntry> implements IBarDataSet {
    // implement all by the extended class and interface required methods
}

创建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+的设备.