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),此时,如果手指离开了图表的时候,图表没有滑动到最后一个数据项,而由于惯性,继续滑动到最后一个数据项,此时就可以触发加载更多了。

转自:http://www.alliedjeep.com/139241.htm

猜你喜欢

转载自blog.csdn.net/u014538198/article/details/78133927
今日推荐