onTouchEvent у Overlay с задержкой по времени

Ответить
Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

onTouchEvent у Overlay с задержкой по времени

Сообщение Mikhail_dev » 11 сен 2012, 07:52

Здравствуйте. Как можно реализовать возможность, чтобы при нажатии на карту в течении секунды к примеру, выполнялось к примеру какое-либо действие? Как например делают гугл карты или яндекс карты, когда нажимаешь на экран и держишь его на одной точке, то появляется меню. Можно конечно сделать как получение разницы по времени от


Код: Выделить всё

public boolean onTouchEvent(MotionEvent event, MapView mapView) {
   if (event.getEventTime()-event.getDownTime()>1000) { ...}
и в нем же, отлавливать еще и радиус дозволенного погрешного передвижения пальца, но мне почему-то кажется, что это всё давным давно реализовано. К примеру при нажатии на главном экране андроида с небольшой задержкой по времени, появляются различные виджеты. Или при нажатии на иконку приложения, появляется в углу иконки крест на удаление. Надеюсь получилось понятно объяснить

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: onTouchEvent у Overlay с задержкой по времени

Сообщение rezak90 » 11 сен 2012, 09:34

а не пробывали реализовать контекстное меню на карте, вдруг можно? Было бы красиво реализовать Quick Actions, но это велосипед ещё тот, зато результат какой будет ;) . А так стандартных реализаций думаю нету (по крайней мере не встречал).
В андроиде вообще много не логичных вещей. Например все паттерны нужно реализовывать руками. Почему бы разрабам не всунуть это в апи и облегчить жизнь нам :?
R.id.team
Политика на форуме запрещена

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: onTouchEvent у Overlay с задержкой по времени

Сообщение Mikhail_dev » 11 сен 2012, 11:23

Есть такое дело. Называется GestureDetector и в целом механизм называется механизмом жестов. Подсказали на другом форуме только что. А вот к примеру код, который я реализовал для использования получения координат по тыканью пальца =)

Код: Выделить всё

import org.osmdroid.api.IGeoPoint;
import org.osmdroid.views.MapView;

import android.content.Context;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.widget.Toast;

class ClickHandlerOverlay extends org.osmdroid.views.overlay.Overlay {
	
	private MapActivity mapActivity;
	
	public ClickHandlerOverlay(MapActivity mapActivity) {
		super(mapActivity);
		this.mapActivity=mapActivity;
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void draw(Canvas arg0, MapView arg1, boolean arg2) {
		// TODO Auto-generated method stub
		
	}
	
    public boolean onLongPress(final MotionEvent event, final MapView mapView) {
        IGeoPoint p = mapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());
        Toast.makeText(mapActivity, p.getLatitudeE6() / 1E6 + "," + p.getLongitudeE6() /1E6 ,Toast.LENGTH_SHORT).show();
        return true;
    }


}
Вместо MapActivity естественно может стоять context. Просто мне понадобился именно MapActivity. Ах да, почему собственно GestureDetector... Просто карты OpenStreeMap уже реализует необходимый инфтерфейс.
* This class implements a form of Gesture Handling similar to
* {@link android.view.GestureDetector.SimpleOnGestureListener} and
* {@link GestureDetector.OnGestureListener}. The difference is there is an additional argument for
* the item.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: onTouchEvent у Overlay с задержкой по времени

Сообщение rezak90 » 11 сен 2012, 11:32

аааа, я думал обычный GoogleMaps, то там наверное такого нету.
R.id.team
Политика на форуме запрещена

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: onTouchEvent у Overlay с задержкой по времени

Сообщение Mikhail_dev » 11 сен 2012, 14:55

Да я чтобы народ не пугать чем-то другим, кроме гугл карт =) думал по аналогии ответ найду. OSRM практически такие же. А в некоторых случаях еще и со своим блек джеком ... :)

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: onTouchEvent у Overlay с задержкой по времени

Сообщение Digetix » 26 дек 2012, 16:22

А как быть с обычными картами Google ? Или такое и на них пойдет?
Если, например, обычный:

Код: Выделить всё

public class MainActivity extends MapActivity {      
  
     MapView mapView;
    
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);         
        
         mapView = (MapView) findViewById(R.id.mapview);
         mapView.setBuiltInZoomControls(true);
         mapView.postInvalidate();            
     }
}

Ответить