基于MPAndroidChart库制作K线图(三) ­­­­­­­­­­­­—— 手势高亮联动

目录
基于MPAndroidChart库制作K线图(一) ­­­­­­­­­­­­—— 基础图
基于MPAndroidChart库制作K线图(二) ­­­­­­­­­­­­—— 自定义x、y轴
基于MPAndroidChart库制作K线图(三) ­­­­­­­­­­­­—— 手势高亮联动


一、效果图

二、高亮联动
图表联动高亮显示时,通过OnChartValueSelectedListener()可以监听到图表的Entry值,通过k线图高亮来处理柱状图的高亮联动就需要重写onValueSelected方法

@Override
public void onValueSelected(Entry e, Highlight h) {
    if (dstCharts != null) {
        for (BarLineChartBase chart : dstCharts) {
            float touchY = h.getDrawY();//手指接触点在srcChart上的Y坐标,即手势监听器中保存数据
            float y = h.getY();
            if (chart instanceof BarChart) {
                y = touchY - srcChart.getHeight();
            } else if (chart instanceof CombinedChart) {
                y = touchY + chart.getHeight();
            }
            Highlight hl = new Highlight(h.getX(), Float.NaN, h.getDataSetIndex());
            hl.setDraw(h.getX(), y);
            chart.highlightValues(new Highlight[]{hl});
        }
    }
    if (mListener != null) {
        mListener.valueSelected(e);
    }
}

然后给CombinedChart和BarChart分别设置高亮监听

因为k线图本身有左右滑动的监听,如果再滑动高亮线的话就会冲突,而在触发k线图的监听OnChartGestureListener之前通过view的onTouch来更改手势变化

@Override
public boolean onTouch(View v, MotionEvent event) {
    mDetector.onTouchEvent(event);
    if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
        mIsLongPress = false;
        mChart.highlightValue(null, true);
        if (mListener != null) {
            mListener.disableHighlight();
        }
        mChart.enableScroll();
    }
    if (mIsLongPress && event.getAction() == MotionEvent.ACTION_MOVE) {
        if (mListener != null) {
            mListener.enableHighlight();
        }
        Highlight h = mChart.getHighlightByTouchPoint(event.getX(), event.getY());
        if (h != null) {
            h.setDraw(event.getX(), event.getY());
            mChart.highlightValue(h, true);
            mChart.disableScroll();
        }
        return true;
    }
    return false;
}

三、源码下载

github: https://github.com/xkdaq/KoinChart
coding: https://coding.net/u/xkdaq/p/KoinChart/git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值