gpt4 book ai didi

java - 如何确定在android上的长按?

转载 作者:IT老高 更新时间:2023-10-28 23:34:00 24 4
gpt4 key购买 nike

我正在寻找一种方法,当用户长时间触摸 map View (比如说 1000 毫秒)时,我可以了解如何执行某个操作。

我将如何判断用户长时间触摸 map View (或任何 View )的时间。

它类似于安卓谷歌地图应用,当你长按时,它会弹出一个气球叠加项目。

添加编辑

mapView.setOnLongClickListener(new View.OnLongClickListener() {

public boolean onLongClick(View v) {

Toast.makeText(mapView.getContext(), "Hello 123", 2000);
return false;
}
});

上述方法不起作用...任何想法为什么?

添加编辑

这是我目前正在尝试的,但它似乎不起作用,即使我只按电话,它说事件是action_move,

我在我的 MapActivity 中使用了一个内部类

    private long startTime=0;
private long endTime=0;

class MapOverlay extends Overlay {



@Override
public boolean onTouchEvent(MotionEvent ev, MapView mapView) {

if(ev.getAction() == MotionEvent.ACTION_DOWN){
//record the start time
startTime = ev.getEventTime();

Log.d("LC", "IN DOWN");
}else if(ev.getAction() == MotionEvent.ACTION_UP){
//record the end time
endTime = ev.getEventTime();
Log.d("LC", "IN UP");
}else if(ev.getAction() == MotionEvent.ACTION_MOVE){
Log.d("LC", "IN move");
endTime=0;
}

//verify
if(endTime - startTime > 1000){
//we have a 1000ms duration touch
//propagate your own event
Log.d("LC", "time touched greater than 1000ms");
Toast.makeText(getBaseContext(), "Hello 123", Toast.LENGTH_SHORT).show();
startTime=0;
endTime=0;
return true; //notify that you handled this event (do not propagate)
}

return false;//propogate to enable drag

}

}

这是我的错误日志,对我来说没有任何意义

06-29 14:29:55.509: DEBUG/LC(7693): IN move
06-29 14:29:56.149: DEBUG/LC(7693): IN UP
06-29 14:29:56.149: DEBUG/LC(7693): 6346707 6349261
06-29 14:29:56.149: DEBUG/LC(7693): time touched greater than 1000ms

结束时间应该设置为零……但不是……知道为什么吗?

最佳答案

这就是您通常如何创建 onLongClickListener。试试这个:

mapView.setOnLongClickListener(new OnLongClickListener() {

@Override
public boolean onLongClick(View arg0) {

Toast.makeText(mapView.getContext(), "Hello 123", 2000);

return false;

}
});

引用您的编辑:

这可能是得到你想要的东西的方式。

private final Handler handler = new Handler();
private final Runnable runnable = new Runnable() {
public void run() {
checkGlobalVariable();
}
};

// Other init stuff etc...

@Override
public void onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
// Execute your Runnable after 1000 milliseconds = 1 second.
handler.postDelayed(runnable, 1000);
mBooleanIsPressed = true;
}

if(event.getAction() == MotionEvent.ACTION_UP) {
if(mBooleanIsPressed) {
mBooleanIsPressed = false;
handler.removeCallbacks(runnable);
}
}
}

现在您可以使用 checkGlobalVariable 函数进行检查:

if(mBooleanIsPressed == true)

这就是您可以处理这种情况的方法。祝你好运。

关于java - 如何确定在android上的长按?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com