项目使用了Barchart,柱状图,MP有好几个点击、触摸事件,但是对于每一条柱的点击、触摸事件只有2个:
setOnChartValueSelectedListener和setOnTouchListener(barchart的触摸)。
默认点击某一条时,弹出框,继承MarkerView ,重写refreshContent和getoffset,(如需其他,自行添加)
以上是实现了每条柱的点击事件--单击显示、隐藏信息。
好了,需求是长按每条柱,实现ac跳转,找了MP的所有点击、长按、触摸,没有item柱的长按。
纠结了一番,最后解决:方法(setOnChartValueSelectedListener和setOnTouchListener(barchart的触摸))
chartDetection.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry entry, Highlight highlight) {
fisrthx = highlight.getXPx();
Log.v("t", "点击某一条" + highlight.getXPx());
}
@Override
public void onNothingSelected() {
}
});
chartDetection.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
fisrtTime = System.currentTimeMillis();
isClick = false;
break;
case MotionEvent.ACTION_UP:
//100是用来检测为点击事件
if (System.currentTimeMillis() - fisrtTime > 100) {
//400是长按,15是触摸偏移量,这个是根据event.getX()和highlight.getXPx()得来,按实际情况计算
if (System.currentTimeMillis() - fisrtTime > 400 && Math.abs(event.getX() - fisrthx) < 15) {
parseY(entryY);
// Log.v("t", "st" + st);
isClick = true;
}
} else {
isClick = false;
}
break;
}
Log.v("t", "touch" + event.getX());
return isClick;
}
});
isClick初始为false,只有当触摸为大于400ms时才判断为长按事件