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

MPAndroidChart Wiki(译文)~Part 6的更多相关文章

  1. MPAndroidChart Wiki(译文)~Part 4

    16. 动画 注意:本章的动画效果只会在API 11(Android3.0.x)及以上的Android版本上生效 在低于上述的Android版本中,动画将不会被执行,并不会导致程序崩溃. 所有类型的图 ...

  2. MPAndroidChart Wiki(译文)~Part 1

    1. 基础入门 1.1 添加依赖 Gradle 工程添加依赖 (推荐使用) 项目级build.gradle中添加: allprojects { repositories { maven { url & ...

  3. MPAndroidChart Wiki(译文)~Part 5

    19. ChartData子类 这篇wiki主要关注ChartData子类的具体介绍.至于此部分没有提及到的ChartData的子类,代表他们没有特性功能需要介绍. BarData 方法 使用 set ...

  4. MPAndroidChart Wiki(译文)~Part 2

    7. 填充数据 这一章节将讲解给各式各样的图表设置数据的方法. 7.1 LineChart(线形图) 想给图表添加数据,使用如下方法: public void setData(ChartData da ...

  5. MPAndroidChart Wiki(译文)~Part 3

    13. 图例 默认情况下,所有的图表都支持图例并且会自动生成.给图表设置完数据之后,图例会被绘制出来.图例通常由多个条目组成,每个条目由标签形式/形状表示. 自动生成的图例包含的条目数取决于不同颜色的 ...

  6. MPAndroidChart的具体属性方法

    android中常用的第三方图表MPAndroidChart的一些具体属性及方法说明 注意:在将折线图转为曲线图时,lineDataSet.setMode(LineDataSet.Mode.CUBIC ...

  7. <Android 应用 之路> MPAndroidChart~BubbleChart(气泡图) and RadarChart(雷达图)

    简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和iOS两种,这里我们暂时 ...

  8. <Android 应用 之路> MPAndroidChart~ScatterChart

    简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和IOS两种,这里我们暂时 ...

  9. <Android 应用 之路> MPAndroidChart~PieChart

    简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和IOS两种,这里我们暂时 ...

随机推荐

  1. 20145335郝昊《java程序设计》第8周学习总结

    20145335郝昊 <Java程序设计>第8周学习总结 教材学习内容总结 第14章 NIO与NIO2 NIO简介 NIO使用频道来衔接数据结点,在处理数据时,NIO可以让你设定缓冲区容量 ...

  2. MR案例:基站相关01

    字段解释: product_no:用户手机号: lac_id:用户所在基站: start_time:用户在此基站的开始时间: staytime:用户在此基站的逗留时间. product_no lac_ ...

  3. rhel7配置samba_4.7.1,共享给所有人以及共享给指定用户

    1.共享给所有人 服务端配置: yum  -y install samba samba-client samba-common       #安装客户端 mkdir /guest #创建共享文件夹 c ...

  4. mybatis中使用mysql的模糊查询字符串拼接(like)

    方法一: <!-- 根据hid,hanme,grade,模糊查询医院信息--> 方法一: List<Hospital> getHospitalLike(@Param(" ...

  5. Lucene 的 Scoring 评分机制

    转自: http://www.oschina.net/question/5189_7707  Lucene 评分体系/机制(lucene scoring)是 Lucene 出名的一核心部分.它对用户来 ...

  6. CentOS7下安装VLC

    用最新的CentOS7发现没有视频播放器,于是在http://pkgs.org/上查找,发现了nux dextop仓库上有,于是到他的官网上http://li.nux.ro/repos.html查了下 ...

  7. eclipse中把多个项目放在一个文件夹里

    1..Package Explorer 可以在这里打开 2.选择Working sets 3.新建java working set 4.把文件夹显示出来 5.可以把项目移动到文件夹里面了,鼠标左键拖就 ...

  8. POJ2159 ancient cipher - 思维题

    2017-08-31 20:11:39 writer:pprp 一开始说好这个是个水题,就按照水题的想法来看,唉~ 最后还是懵逼了,感觉太复杂了,一开始想要排序两串字符,然后移动之类的,但是看了看 好 ...

  9. 2017ACM/ICPC广西邀请赛-重现赛1005 CS course

    2017-08-31 16:19:30 writer:pprp 这道题快要卡死我了,队友已经告诉我思路了,但是做题速度很缓慢,很费力,想必是因为之前 的训练都是面向题解编程的缘故吧,以后不能这样了,另 ...

  10. vue2.0--vue-router路由

    一.vue-router如何进行参数传递 1.name  $route.name 通过在路由router/index.js中配置路由时定义的name属性来传递 ① 有一个页面components/he ...