如何在MPAndroidChart中移除或隐藏MarkerView?

8
我使用了MPAndroidChart制作了一个条形图。我编写了一个自定义标记视图类来查看条形的值。
我希望在几秒钟后删除或隐藏视图。它应该像toast一样工作。但是我无法做到这一点。
首先,这是一个问题,因为在第一次触摸图表后,它变得可见,并且只有在找到正确的点击条件后才会消失。

有人知道如何解决这个问题吗?

我的代码如下:

mChart.invalidate();
mv = new CustomMarkerView(getContext(), R.layout.alert_chart, position, jsonResponse);
mChart.setMarker(mv);

我的自定义标记视图是

public class CustomMarkerViewextends MarkerView {

public TextView correct;
public TextView wrong ;
public int position;
public JSONArray jsonArray;

public CustomMarkerView(Context context, int layoutResource, int pos, JSONArray json) {
    super(context, layoutResource);

    correct = (TextView) findViewById(R.id.correct);
    wrong = (TextView) findViewById(R.id.wrong);

    position = pos;
    jsonArray = json;

}

@Override
public void refreshContent(Entry e, Highlight highlight) {
    switch (position){
        case 1:
            try {
                correct.setText(getContext().getString(R.string.correct_alert) + "   " + jsonArray.getJSONObject((int)(e.getX())).getString("TP"));
                wrong.setText(getContext().getString(R.string.wrong_alert) + "   " + jsonArray.getJSONObject((int)(e.getX())).getString("FP"));        
            } catch (JSONException e1) {
                e1.printStackTrace();
            } catch (ParseException e1) {
                e1.printStackTrace();
            }

            break;
        case 2:
            try {
                correct.setText(getContext().getString(R.string.tpr_alert) + "   " + Math.round(Double.parseDouble(jsonArray.getJSONObject((int)(e.getX())).getString("TPR"))*100.0)/100.0);
                wrong.setText(getContext().getString(R.string.msr_alert) + "   " + Math.round(Double.parseDouble(jsonArray.getJSONObject((int)(e.getX())).getString("MSR"))*100.0)/100.0);
            } catch (JSONException e1) {
                e1.printStackTrace();
            } catch (ParseException e1) {
                e1.printStackTrace();
            }

            break;
        case 3:
            try {
                correct.setText(getContext().getString(R.string.nmean_alert) + "   " +Math.round(Double.parseDouble(jsonArray.getJSONObject((int)(e.getX())).getString("n_mean"))*100.0)/100.0);
                wrong.setText(getContext().getString(R.string.nmax_alert) + "   " +Math.round(Double.parseDouble(jsonArray.getJSONObject((int)(e.getX())).getString("n_max"))*100.0)/100.0);
            } catch (JSONException e1) {
                e1.printStackTrace();
            } catch (ParseException e1) {
                e1.printStackTrace();
            }

            break;
    }

    // this will perform necessary layouting
    super.refreshContent(e, highlight);

}

private MPPointF mOffset;

@Override
public MPPointF getOffset() {

    if(mOffset == null) {
        // center the marker horizontally and vertically
        mOffset = new MPPointF(-(getWidth()/2), -getHeight());
    }

    return mOffset;
}

}


你找到了这个问题的答案吗? - Nick Asher
2个回答

8
我知道有点晚了,但是:
mChart.highlightValue(null);

对我很有用


有没有办法从一个数据集中删除标记,而另一个数据集仍然可以拥有它们? - mtsahakis
@mtsahakis,不确定该库是否支持此功能,但您可以跟踪突出显示的元素,并在需要从特定数据集中删除突出显示时,只需调用mChart.highlightValue(null);然后重新突出显示所有必要的值。 - Vadim
@mtsahakis 请尝试使用这个 dataSet.setDrawHighlightIndicators(false)。 - Saul_programa
@mtsahakis dataSet.setHighlightEnabled(false) 可以禁用特定数据集上的交互,而不是整个图表。 - Nicolas M.
你好,感谢您的回答。它确实起作用了。现在,如果我触摸图表并移动手指来触发ACTION_MOVE事件,然后松开,markview会消失。但当我点击图表时,它只会触发MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP,但这时markview仍然显示吗?如何解决这个问题。谢谢。@Vadim - penghaitao

3

在图表上设置一个onTouchListener,在MotionEvent ACTION_UP中将高亮值设置为null。代码:

chart.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {

                case MotionEvent.ACTION_UP: {
                    chart.highlightValue(null);
                    break;
                }
            }
            return false;
        }
    });

此外,如果您需要隐藏这个标记,例如在滚动更改时,最好使用 chart.valuesToHighlight() 检查标记的可见性。 - Aleksandr Gorshkov
你好,感谢您的回答。它有效,但有点问题。现在,如果我触摸图表并移动手指以触发ACTION_MOVE事件,然后松开,标记视图会消失。但是当我点击图表时,它只会触发MotionEvent.ACTION_DOWN和MotionEvent.ACTION_UP,但这次标记视图仍然显示?如何解决这个问题。谢谢。@Nick Asher - penghaitao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接