MPAndroidChart中,滑动图表到最后一个的时候加载更多数据

在MPAndroidChart中,有时候显示在图表中的数据太多,想要分页加载数据时,可以调用setOnChartGestureListener这个事件,然后在onChartGestureStart、onChartGestureEnd和onChartTranslate方法中进行做相关的处理。

当然,要让MPAndroidChart中的图表可滑动,必须设置mBarChart.setTouchEnabled(true); mBarChart.setDragEnabled(true)。在滑动事件中,判断是否滑动到图表的最右边的尽头(即最后一个entry),可以使用mBarChart.getHighestVisibleXIndex();获取在可视区域中显示在x轴最右边的entry的index,这样就可以把这个index和当前总的数据的个数进行比较,然后进行相关的处理了。(mBarChart.getLowestVisibleXIndex()是获取在可视区域中,显示在x轴最左边的index,可以根据这个index,处理刷新数据)

代码如下:

mBarChart.setOnChartGestureListener(new OnChartGestureListener() {
    @Override
    public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
        mIsCanLoad = false;
    }

    @Override
    public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {

        int rightXIndex = mBarChart.getHighestVisibleXIndex();    //获取可视区域中,显示在x轴最右边的index
        int size = mBarChart.getBarData().getXVals().size();

        if(lastPerformedGesture == ChartTouchListener.ChartGesture.DRAG){
            mIsCanLoad = true;
            if(rightXIndex == size-1 || rightXIndex == size){
                mIsCanLoad = false;
               //加载更多数据的操作

            }
       }
    }

    @Override
    public void onChartLongPressed(MotionEvent me) {
        
    }

    @Override
    public void onChartDoubleTapped(MotionEvent me) {
       
    }

    @Override
    public void onChartSingleTapped(MotionEvent me) {
       
    }

    @Override
    public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
        
    }

    @Override
    public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
        Log.i("My","onChartScale");
    }

    @Override
    public void onChartTranslate(MotionEvent me, float dX, float dY) {
        if(mIsCanLoad){
            int rightXIndex = mBarChart.getHighestVisibleXIndex();     //获取可视区域中,显示在x轴最右边的index
            int size = mBarChart.getBarData().getXVals().size();
            if(rightXIndex == size-1 || rightXIndex == size){
                mIsCanLoad = false;
                //加载更多数据的操作

            }
        }
    }
});

在以上的代码中,onChartGestureEnd和onChartTranslate两个地方都做处理,因为在滑动的时候,当手离开了图表时(调用onChartGestureEnd),图表还会继续滑动(调用onChartTranslate),此时,如果手指离开了图表的时候,图表没有滑动到最后一个数据项,而由于惯性,继续滑动到最后一个数据项,此时就可以触发加载更多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值