В попытке повернуть карту в моем приложении на 360 градусов вокруг пользователя одним пальцем (стиль покемона в стиле покера) Я придумал следующее решение.Карты Google: обнаружение и перемещение событий на карте google
Я заложил представление обо всем фрагменте, который содержит карту, и добавил к нему onTouchListener, поскольку на карте не может быть установлен onTouchListener. Приведенный ниже код поворачивает карту, когда пользователь тащит один палец, и на самом деле он работает достаточно хорошо.
previousMapTouchX = 0.0f;
previousMapTouchY = 0.0f;
coveringView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float x = motionEvent.getX();
float y = motionEvent.getY();
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
Log.e("MAP", "MOVE");
float dx = x - previousMapTouchX;
float dy = y - previousMapTouchY;
// reverse direction of rotation above the mid-line
if (y > coveringView.getHeight()/2) {
dx = dx * -1 ;
}
// reverse direction of rotation to left of the mid-line
if (x < coveringView.getWidth()/2) {
dy = dy * -1 ;
}
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()),
googleMap.getCameraPosition().zoom, MAX_TILT,
googleMap.getCameraPosition().bearing + ((dx + dy) * TOUCH_SCALE_FACTOR)));
googleMap.moveCamera(cameraUpdate);
break;
case MotionEvent.ACTION_DOWN:
Log.e("MAP", "DOWN");
return false;
}
previousMapTouchX = x;
previousMapTouchY = y;
return true;
}
});
Проблема, однако, что в то время как я могу повернуть карту, маркеры становятся неприкасаемыми, потому что вид сверху потребляет все события прикосновения. Поэтому я добавил случай, чтобы вернуть false, если обнаружен MotionEvent.ACTION_DOWN. Это также работает, однако, поскольку пользователь, очевидно, всегда выполняет действие ACTION_DOWN перед действием ACTION_MOVE, это означает, что код вращения карты никогда не был достигнут.
Я застрял в ситуации, когда я могу либо правильно повернуть карту, не имея возможности выбрать маркеры карты, либо выбрать маркеры карт, не имея возможности повернуть карту.
Есть ли у кого-нибудь предложения о том, как я могу заставить это работать? Было бы намного проще, если бы на карте google мог быть только onTouchListener.
работает как шарм! Большое спасибо Антонио – Dportology