MPAndroidChart MarkerView的精确点击问题解决方案

说到在Android中画图,相信大家对MPAndroidChart不陌生,其功能强大,能画出各种各样非常绚丽的效果图。但是近期公司的项目要求在markerview上添加一些按钮,能够直接在markerview上操作按钮来直接对图上的point进行操控。然后在lib里找了半天,发现原生根本就不支持此功能,然后在其github MPAndroidChart的issue里查找相关问题,发现还真是有很多人提出了这个问题,让作者解决这个问题,但是这个问题一直没有得到很好的解决,记得作者在issue里回答说”it is harder than what I thought…”,然后就没有然后了。我直接懵逼…

但是,硬着头皮也要上,自己override各种方法来尝试,均为成功,差点没有崩溃!最后,在issue里发现了一个对我很有启发的方式,这里谢谢这个哥们儿!
https://github.com/PhilJay/MPAndroidChart/issues/2482

不过这种方式需要改源码,不能让你使用如下方式来集成进项目
compile ‘com.github.PhilJay:MPAndroidChart:v3.0.0-beta1’
所以,要解决这个问题,首先必须把MPAndroidChart从github上download下来,以compile library的方式来使用。

另外,这个只解决了,是否点击了markerview,如果点击了的话,相应其点击事件。如果此时,需要更为精确的控制,比如最开始提出的在markerview里添加一些按钮,对这些按钮来响应不同的点击事件,该怎么办呢?我这里已经实现了!在这里把它分享出来,相信对有需要的朋友有所帮助!

  1. 在BarLineChartBase里修改一下onTouchEvent方法,如下:
@Override
    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);

        if (mChartTouchListener == null || mData == null)
            return false;

        //这里是新添加的判断,让markerView有机会相应点击事件!
        if(mMarker !=null && MotionEvent.ACTION_UP == event.getAction() && mMarker.isTouch(event)){
            mMarker.markViewClick();
            return true;
        }

        // check if touch gestures are enabled
        if (!mTouchEnabled)
            return false;
        else
            return mChartTouchListener.onTouch(this, event);
    }
  1. 在IMarker里添加如下方法
boolean isTouch(MotionEvent event);
void markViewClick();
  1. 在MarkerView里修改draw方法,实现isTouch,markViewClick方法,另外添加2个属性用来记录点击point在markerview里的相对位置
/**
     * relativeTouchPointX, relativeTouchPointY 是 touch 的点
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值