MPChart BarChart柱狀圖長按跳轉

項目使用了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("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時才判斷爲長按事件



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章