Szukam sposobu, w którym użytkownik długo dotyka widok mapy (powiedzmy na 1000ms), że mogę niektóre, jak wykonać określoną akcję.Jak określić długi dotyk na Androidzie?
W jaki sposób oceniać, jak długo użytkownik długo dotyka widoku mapy (lub dowolnego widoku).
Byłoby podobne do aplikacji mapy google na Androida, po długim dotyku wyświetla element nakładki balonu.
Edit dodane
mapView.setOnLongClickListener(new View.OnLongClickListener() {
public boolean onLongClick(View v) {
Toast.makeText(mapView.getContext(), "Hello 123", 2000);
return false;
}
});
powyższe nie działa ... jakieś pomysły dlaczego?
Edit dodane
To co próbuję w tej chwili, ale to nie wydaje się działać, nawet jeśli tylko nacisnąć przycisk na telefonie, to mówi, że wydarzenie to action_move,
ja używam wewnętrzną klasę w moim 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
}
}
i tu jest mój dziennik błędów, że nie ma sensu do mnie
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
czas zakończenia powinien być ustawiony na zero ... ale to nie jest ... żaden pomysł, dlaczego?
To działało idealnie! Oto wersja C#/Xamarin, której ktoś potrzebuje: 'protected long _touchStartTime; publiczny nadpisanie bool OnTouchEvent (MotionEvent e) {if (e.Action == MotionEventActions.Down) _touchStartTime = e.EventTime; if (e.Action == MotionEventActions.Up && e.EventTime - _touchStartTime> 1000) DoSomethingFun(); return base.OnTouchEvent (e);} ' – BayssMekanique