Mapbox - 避免自动中心

时间:2016-11-11 12:53:19

标签: android mapbox

我在scrollview中使用Mapbox地图。在这个scrollview中我有主要的LinearLayout,在这里,我有5个区域有不同的信息。地图位于第三区。

由于第一个和第二个区域中的数据量,在显示时,地图区域必须可见并且要查看它,您需要滚动。

不幸的是,Mapbox似乎有一个“自动中心”系统:只要Scrollview开始显示,它的位置就会自动设置到Map的中心。 因此用户必须滚动回滚动视图的顶部。 如何避免这种“初始位置功能”?

注意:这不是一个重复的问题:Using mapbox in scrollview, scrollview sliding to the position where mapbox is put in the page 因为问题不是“如何移动地图而不移动滚动视图”。问题是scrollview的初始位置。答案“做mScrollView.scrollTo(0,0);”这是不可接受的,滚动视图首先以地图为中心,然后是滚动。

编辑:这里有两张图片和更多细节。

Display in vertical mode

此第一个快照以垂直模式显示scrollview。我有一个名为“INFORMAÇOES”的第一个区域,第二个名为“TIPODEOCORENÇA”,第三个区域是地图,之后我还有另外两个区域。 由于区域1和2的大小,在垂直模式下,地图区域是部分可见的。此快照在显示开始时显示屏幕。

Snap in horizontal mode

此第二个快照同时在显示开始时拍摄,但在水平模式下拍摄。当然,可见数据量是不同的。我们可以看到,地图区域似乎强制滚动才能显示。

经过一些测试我发现奇怪的想法:当你滚动时,你通常会在屏幕顶部设置数据的顶部。在地图的情况下,情况并非如此。在显示开始时快速显示的第一个元素是Mapbox徽标。

以下是XML部分:

        <LinearLayout
            android:layout_margin="5dp"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:orientation="vertical"
            android:layout_below="@id/linearLayout_type"
            android:id="@+id/linearLayout_map">

            <com.mapbox.mapboxsdk.maps.MapView
                mapbox:zoom="12"
                android:id="@+id/mapview_inter"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </LinearLayout>

我做过的测试:

1 - 在com.mapbox.mapboxsdk.maps.MapView中放置一个android:visibility =“gone”。这是不允许的。

2 - 在com.mapbox.mapboxsdk.maps.MapView中放置一个android:visibility =“invisible”。这是不允许的。

3 - 在地图的linearlayout(linearLayout)中放置一个android:visibility =“invisible”。一无所获。地图不可见,但“滚动”发生了。

4 - 在地图的linearlayout(linearLayout)中放置一个android:visibility =“gone”。在那种情况下,没关系:数据的“INFORMAÇOES”部分位于顶部。但他们没有渲染地图。所以当我执行

  LinearLayout tmp = (LinearLayout) findViewById(R.id.linearLayout_map);
  tmp.setVisibility(View.VISIBLE); 

看到地图,我看到......没有:(

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

首先,您应该提供LinearLayout特定dp大小或MapView。现在你正在使用match_parent。您可以使用scrollView.fullScroll(ScrollView.FOCUS_UP);回调中的OnMapReady强制ScrollView到顶部,这为我解决了问题。