我正在使用achartengine,当我长按图表时,我想在Action Bar中激活动作模式。但OnLongClickListener无法正常工作,我搜遍了所有地方我几乎尝试了所有东西,但我无法让它工作,我不知道为什么。这是我的代码:
mChartView.setLongClickable(true);
mChartView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.i("ClickListener", "CLICK");
return false;
}
});
但事件永远不会被调用,我认为这是因为图表可滚动但没有意义。我尝试使用OnClick,但也无法正常工作。唯一有效的是OnTouch,但我无法得到Long-Press的行为。
修改
或者也许是获得触摸屏状态的实际状态的任何方式,通过这种方式,我可以放置一个“计时器”,直到达到例如1000mS但仅在触摸屏触摸时,因为在onTouch事件中我可以只有当事件发生时才知道触摸屏的状态,无论当前状态如何。
好的,这里有折线图的代码:
private static XYSeries input1;
private static XYMultipleSeriesDataset mDataset;
private static XYSeriesRenderer renderer1;
private static XYMultipleSeriesRenderer mRenderer;
private static GraphicalView mChartView;
mRenderer = new XYMultipleSeriesRenderer();
renderer1 = new XYSeriesRenderer();
mRenderer.setOrientation(Orientation.HORIZONTAL);
mRenderer.addSeriesRenderer(renderer1);
mRenderer.setXAxisMax(10);
mRenderer.setYAxisMax(10);
mRenderer.setAxesColor(Color.WHITE);
mRenderer.setLabelsColor(Color.WHITE);
mRenderer.setShowGrid(true);
input1 = new XYSeries("Linea");
mDataset = new XYMultipleSeriesDataset();
mDataset.addSeries(input1);
renderer1.setColor(Color.WHITE);
input1.add(4, 7);
input1.add(7, 3);
input1.add(8, 6);
input1.add(9, 2);
mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer);
setContentView(mChartView);
mChartView.setLongClickable(true);
mChartView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.i("Click", "LONG CLICKED CHART");
return false;
}
});
我正在尝试使用onTouch进行长按,因为我意识到如果我滑动图形它也将被视为长按,所以我必须采取长按但是如果我不滑动曲线图。
答案 0 :(得分:2)
您可以将runnable与onTouchListener()结合使用,以获得与onLongClick()相同的效果。这样的事情应该这样做:
boolean fingerStillDown = false;
final Runnable longClickRun = new Runnable(){
public void run(){
if(fingerStillDown){
Log.i("CHARTS!", "LONGCLICK!");
}
}
};
mChartView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent me){
if(me.getAction() == MotionEvent.ACTION_DOWN){
fingerStillDown = true;
//The system registers longclick at ~500ms.
mChartView.postDelayed(longClickRun, 500);
}
if(me.getAction() == MotionEvent.ACTION_UP){
fingerStillDown = false;
}
return false; //<-- I didn't test with true, but I suspect returning true
// would break the scrolling.
}
});
答案 1 :(得分:0)
尝试返回true 而不是false。这样,元素被长按,所以已经处理了evend。
mChartView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.i("ClickListener", "CLICK");
return true;
}
});