我在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);”这是不可接受的,滚动视图首先以地图为中心,然后是滚动。
编辑:这里有两张图片和更多细节。
此第一个快照以垂直模式显示scrollview。我有一个名为“INFORMAÇOES”的第一个区域,第二个名为“TIPODEOCORENÇA”,第三个区域是地图,之后我还有另外两个区域。 由于区域1和2的大小,在垂直模式下,地图区域是部分可见的。此快照在显示开始时显示屏幕。
此第二个快照同时在显示开始时拍摄,但在水平模式下拍摄。当然,可见数据量是不同的。我们可以看到,地图区域似乎强制滚动才能显示。
经过一些测试我发现奇怪的想法:当你滚动时,你通常会在屏幕顶部设置数据的顶部。在地图的情况下,情况并非如此。在显示开始时快速显示的第一个元素是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);
看到地图,我看到......没有:(
有什么建议吗?
答案 0 :(得分:0)
首先,您应该提供LinearLayout
特定dp大小或MapView
。现在你正在使用match_parent
。您可以使用scrollView.fullScroll(ScrollView.FOCUS_UP);
回调中的OnMapReady
强制ScrollView到顶部,这为我解决了问题。