SoulReaver313
SoulReaver313

Reputation: 543

How to show highlight in LineChart only when chart in press state or drag state?

I need to repeat similar behavior to Google Fit charts. When chart is pressed or dragging - we show highlighter on chart. Right after finger don't touch chart - remove highlighter. I found "onTap" variable for tap on chart - but it's work only when we tap and then remove finger from screen. But i need to show highlighter right after finger touched chart

Upvotes: 2

Views: 1152

Answers (1)

Cook Chen
Cook Chen

Reputation: 537

The MakerView and OnChartGestureListener can help, onChartGestureEnd tells when should the marker should disappear:

final MyMarkerView marker = new MyMarkerView(this, R.layout.custom_marker_view);
chart.setMarker(marker);
chart.setDrawMarkers(true);
chart.setOnChartGestureListener(new OnChartGestureListener() {
    @Override
    public void onChartGestureStart(MotionEvent me,
        ChartTouchListener.ChartGesture lastPerformedGesture) {
        chart.setDrawMarkers(true);
            for(int i = 0; i < chart.getLineData().getDataSetCount(); ++i) {
                ILineDataSet set = chart.getLineData().getDataSetByIndex(i);
                set.setHighlightEnabled(true);
            }
     // Thanks to Mr. SoulReaver313 !                   
     chart.highlightValue(chart.getHighlightByTouchPoint(me.getX(), me.getY())); 
    }

    @Override
    public void onChartGestureEnd(MotionEvent me,
        ChartTouchListener.ChartGesture lastPerformedGesture) {
        chart.setDrawMarkers(false);
            for(int i = 0; i < chart.getLineData().getDataSetCount(); ++i) {
                ILineDataSet set = chart.getLineData().getDataSetByIndex(i);
                set.setHighlightEnabled(false);
            }
        chart.invalidate();
    }

    @Override
    public void onChartLongPressed(MotionEvent me) {

    }

    @Override
    public void onChartDoubleTapped(MotionEvent me) {

    }

    @Override
    public void onChartSingleTapped(MotionEvent me) {

    }

    @Override
    public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX,
        float velocityY) {

    }

    @Override
    public void onChartScale(MotionEvent me, float scaleX, float scaleY) {

    }

    @Override
    public void onChartTranslate(MotionEvent me, float dX, float dY) {

    }
});

enter image description here

Upvotes: 4

Related Questions