使用MPAndroidChart实现K线图(4)——图表联动、加载更多

目录

使用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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值