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("tfhr", "點擊某一條" + 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("tfhr", "st" + st); isClick = true; } } else { isClick = false; } break; } Log.v("tfhr", "touch" + event.getX()); return isClick; } });isClick初始爲false,只有當觸摸爲大於400ms時才判斷爲長按事件