Страница 1 из 1
onTouchEvent у Overlay с задержкой по времени
Добавлено: 11 сен 2012, 07:52
Mikhail_dev
Здравствуйте. Как можно реализовать возможность, чтобы при нажатии на карту в течении секунды к примеру, выполнялось к примеру какое-либо действие? Как например делают гугл карты или яндекс карты, когда нажимаешь на экран и держишь его на одной точке, то появляется меню. Можно конечно сделать как получение разницы по времени от
Код: Выделить всё
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
if (event.getEventTime()-event.getDownTime()>1000) { ...}
и в нем же, отлавливать еще и радиус дозволенного погрешного передвижения пальца, но мне почему-то кажется, что это всё давным давно реализовано. К примеру при нажатии на главном экране андроида с небольшой задержкой по времени, появляются различные виджеты. Или при нажатии на иконку приложения, появляется в углу иконки крест на удаление. Надеюсь получилось понятно объяснить
Re: onTouchEvent у Overlay с задержкой по времени
Добавлено: 11 сен 2012, 09:34
rezak90
а не пробывали реализовать контекстное меню на карте, вдруг можно? Было бы красиво реализовать Quick Actions, но это велосипед ещё тот, зато результат какой будет

. А так стандартных реализаций думаю нету (по крайней мере не встречал).
В андроиде вообще много не логичных вещей. Например все паттерны нужно реализовывать руками. Почему бы разрабам не всунуть это в апи и облегчить жизнь нам

Re: onTouchEvent у Overlay с задержкой по времени
Добавлено: 11 сен 2012, 11:23
Mikhail_dev
Есть такое дело. Называется
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.
Re: onTouchEvent у Overlay с задержкой по времени
Добавлено: 11 сен 2012, 11:32
rezak90
аааа, я думал обычный GoogleMaps, то там наверное такого нету.
Re: onTouchEvent у Overlay с задержкой по времени
Добавлено: 11 сен 2012, 14:55
Mikhail_dev
Да я чтобы народ не пугать чем-то другим, кроме гугл карт =) думал по аналогии ответ найду. OSRM практически такие же. А в некоторых случаях еще и со своим блек джеком ...

Re: onTouchEvent у Overlay с задержкой по времени
Добавлено: 26 дек 2012, 16:22
Digetix
А как быть с обычными картами 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();
}
}