目录
使用MPAndroidChart实现K线图(1)——基本用法
使用MPAndroidChart实现K线图(2)——自定义XY轴
使用MPAndroidChart实现K线图(3)——自定义柱状图
使用MPAndroidChart实现K线图(4)——图表联动、加载更多
使用MPAndroidChart实现K线图(5)——高亮联动、横竖屏切换
首先说一下图表联动和加载更多流程逻辑。图表联动是指,当滑动上部分的K线图时,成交量图会跟随滑动;当滑动成交量图时,K线图会跟随滑动。而显示和加载的逻辑相对复杂一点,默认情况下,K线左右边缘的两个只会显示一半,数据的时间是从左向右的,右侧数据的时间比左侧数据的时间更新,也就是从右向左滑可以滑到没有数据,而从左向右滑可以有足够多的数据,因此始终使最右端数据显示完整,最左端不考虑。在设置完数据后,再给Chart的X轴设置最大值即可使最右端显示完整。
float xMax = xValues.size() - 0.5F;//默认X轴最大值是 xValues.size() - 1
cc.getXAxis().setAxisMaximum(xMax);//使最后一个显示完整
bc.getXAxis().setAxisMaximum(xMax + barOffset);//保持边缘对齐
接着往下,初次获取数据后,设置好图表后,把图表平移到最右端,显示最新数据;滑动到边缘加载更多后,如果加载的是右侧的数据,则平移到最右端,如果加载的是左侧的数据,则平移到加载之前的位置。加载更多后的图表绘制,最初的想法是追加到图表的原有数据上(因为有向左追加的缘故,X的值会取负数且越来越小),但经过试验,发现向右追加有效,但是向左追加后不会接着绘制(想不明白这里的原因)。最后的实现方式是,把原始数据存放在dataList中,有新数据就插入进去,每次获取数据后,不论是初次获取,还是追加加载,都对图表进行清空数据并重绘,绘制后平移到对应的位置。
自定义手势监听器OnChartGestureListener
联动滑动时会回调图表手势监听,因此要自定义OnChartGestureListener,命名为CoupleChartGestureListener。
public class CoupleChartGestureListener implements OnChartGestureListener {
private BarLineChartBase srcChart;
private Chart[] dstCharts;
private OnEdgeListener edgeListener;//滑动到边缘的监听器
private boolean isLoadMore;//是否加载更多
private boolean canLoad;//K线图手指交互已停止,正在惯性滑动
public CoupleChartGestureListener(BarLineChartBase srcChart, Chart... dstCharts) {
this.srcChart = srcChart;
this.dstCharts = dstCharts;
isLoadMore = false;
}
public CoupleChartGestureListener(OnEdgeListener edgeListener, BarLineChartBase srcChart,
Chart... dstCharts) {
this.edgeListener = edgeListener;
this.srcChart = srcChart;
this.dstCharts = dstCharts;
isLoadMore = true;
}
@Override
public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
canLoad = false;
syncCharts();
chartGestureStart(me, lastPerformedGesture);
}
@Override
public void onCha