Как определить долгое касание на Android?

Я ищу способ, когда пользователь долго касается просмотра карты (скажем, 1000 мс), я могу каким-то образом выполнить определенное действие.

H Как долго я буду судить о том, как долго пользователь касается просмотра карты (или любого другого вида).

Это было бы похоже на приложение Google Maps для Android, когда вы долгое касание, оно вызывает элемент наложения балуна.

Редактировать добавлено

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

, время окончания должно быть установлено на ноль. ..но ... понятия не имею, почему?

16
задан molleman 29 June 2011 в 15:13
поделиться