Проблема с жестом с 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>
Ответы
Ответ 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;