在我的应用程序中,我有一些使用MPAndroidChart的条形图,当我触摸一个栏时会打开一个活动,显示有关所选值的一些信息。我正在使用“OnChartValueSelectedListener”来做到这一点。
问题在于触摸太明智了。当我触摸屏幕只是为了滚动它,如果我触摸一个值,则会打开一个活动。
我正在寻找像“OnLongClickListener”这样的东西,以避免每次触摸栏时都要打开活动。但我找不到任何东西。有一些方法可以在MP Android Chart上模仿“长触摸值”吗?
这是我的代码的一部分:
mChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
// registra o estado da selecao para chamar esta funcao na funcao onNothingSelected
entry = e;
index = dataSetIndex;
highlight = h;
// caso algum cliente tenha sido cadastrado no dia selecionado
if(e.getVal() > 0) {
ViewUtil.exibirMensagemAguarde(R.string.aguarde, R.string.carregando_dados, OverviewActivity.this);
// guarda os dados para serem usados pelo metodo onNothingSelected
entry = e;
index = dataSetIndex;
highlight = h;
// obtem o ano atual
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
// obtem o dia selecionado e concatena o ano atual
dateSelected = xVals.get(h.getXIndex()) + "/" + currentYear;
// chama a tarefa assincrona que obtem os clientes cadastrados no dia selecionado
// e abre a activity
ClientesCadastradosDiaAsync task = new ClientesCadastradosDiaAsync();
task.execute();
}
}
@Override
public void onNothingSelected(){
onValueSelected(entry, index, highlight);
}
});
答案 0 :(得分:0)
您的解决方案将涉及创建一个实现OnChartGestureListener
查看上面链接的javadoc,您可以立即看到有一个方法:
build.gradle
您必须使用所需的功能实现此方法。它可能涉及从void onChartLongPressed(MotionEvent me);
获取原始像素触摸点并将它们转换为图表上的x和y值。然后,您可以根据您的要求打开相应的活动。参考this answer,我们可以这样做:
MotionEvent
中有一个自定义@Override
public void onChartLongPressed(MotionEvent me) {
float tappedX = me.getX();
float tappedY = me.getY();
MPPointD point = mChart.getTransformer(YAxis.AxisDependency.LEFT).getValuesByTouchPoint(tappedX, tappedY);
Log.d(TAG, "long pressed at: " + point.x + "," + point.y);
//TODO: check for long presses that don't correspond to a value on the chart
//launch the Activity as per your requirement
}
的示例