Подтвердить что ты не робот

Проблема с жестом с mapview на странице viewpager

Мой основной интерфейс приложения - это viewpager, где пользователь просто горизонтально перемещает страницы по страницам. На одной из страниц есть карта google (вставка ниже). Моя проблема в том, что если пользователь находится на странице карты и использует горизонтальный жест слайдов, страница переходит на следующую страницу, а не карту, движущуюся вбок. Это как будто зритель получает жест перед картой.

Если пользователь умный и начинает разворачивать карту в диагональном или вертикальном направлении, карта начинает двигаться, а затем жест может продолжаться горизонтально. Но я предпочел бы перемещение карты вместо страницы на простом горизонтальном слайде. Страница всегда можно сдвинуть, используя текстовое окно.

Есть ли способ сделать это возможным?
благодаря, Gary

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ContentPanel"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

 <TextView
    android:id="@+id/tvMAP"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Map"
    style="@style/bigtype" />


<com.google.android.maps.MapView
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:apiKey="mykeygoeshere"
    android:clickable="true" />

</LinearLayout>
4b9b3361

Ответ 1

Конечно, есть:

public class CustomViewPager extends ViewPager {

    public CustomViewPager(Context context) {
        super(context);
    }

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
        if(v instanceof MapView){
            return true;
        }
        return super.canScroll(v, checkV, dx, x, y);
    }

}

Это заставит карту игнорировать все слайды внутри карты и просто заботится о слайдах/перетаскиваниях за пределами карты. Надеюсь, поможет. (Я делаю это прямо сейчас для веб-просмотра с горизонтальной прокруткой)

EDIT:. Забыл упомянуть, что вместо ViewPager вам нужно использовать CustomViewPager в макете yout.

<com.yourpackage.CustomViewPager
            android:id="@+id/viewpager"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
        />

Ответ 2

Если вы используете Google Maps V2, используйте

scrollingView.getClass(). GetPackage(). GetName(). StartsWith ( "карты" ). в методе canScroll:

@Override
protected boolean canScroll(View scrollingView, boolean checkV, int dx, int x, int y) {
    if (scrollingView.getClass().getPackage().getName().startsWith("maps.")) {
        return true;
    }
    return super.canScroll(scrollingView, checkV, dx, x, y);
}

Becase scrollingView - maps.j.b при использовании карт v2.

Также в моем коде используются следующие классы:

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;