我在recyclerview行中使用了地图视图。 我附上了截图。 滚动地图显示黑色闪烁背景。
适配器代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="150dp">
<com.google.android.gms.maps.MapView
android:id="@+id/checkInMapView"
android:layout_width="0dp"
android:layout_height="150dp"
android:layout_weight="1"
android:enabled="true"
android:visibility="gone"
map:cameraZoom="15"
map:liteMode="true"
map:mapType="normal" />
<!-- I have also tried adding transparent view as below but still no solution.
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"/>-->
</LinearLayout>
我引用此链接:Link 但是在这个演示中他们在我的代码中使用了数组适配器,我们使用了recyclelerview适配器。
xml代码:
onBindCheckInViewHolder(...){
holder.mapView.onCreate(null);
holder.mapView.getMapAsync(googleMap -> {
MapsInitializer.initialize(context);
gMap = googleMap;
googleMap.getUiSettings().setMapToolbarEnabled(false);
moveMap(gMap, singleCheckIn.getLatitude(), singleCheckIn.getLongitude());
});
}
我没有执行任何放大,缩小或拖动。 提前谢谢。
更新
以前我在viewHolder中初始化map而不是上面提到的场景。
{{1}}
答案 0 :(得分:3)
在AndroidManifest.xml中写下这一行:
android:hardwareAccelerated="true"
<application
android:name="com.xyz"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
</application>
有效。
答案 1 :(得分:2)
所以我稍微挖了一下,这里有一些建议让性能好一些,但它并不完美,但速度要快得多。
地图类型
这基本上决定了地图的外观(普通/混合......等),在这些情况下你需要将地图类型设置为GoogleMap.MAP_TYPE_NONE
。
XML
您定义视图的位置,因此这是默认类型onViewRecycled
,如果holder
GoogleMap
将其类型设置为无在调用GoogleMap.MAP_TYPE_NORMAL
时,只需将您的类型设置回onBindViewHolder
或您想要的任何类型。
预初始化
从MapsInitializer.initialize(context)
回拨中致电onMapReady
。
<强>初始化强>
从GoogleMap.onCreate()
致电GoogleMap.getMapAsync()
和onCreateViewHolder
,也许在您的ViewHolder
构造函数中。
RecyclerView预取
您还可以使用LinearLayoutManager
的简洁新功能,您可以拨打LinearLayoutManager.setInitialPrefetchItemCount
,开始准备关闭屏幕项目。
并非这会导致其他性能问题,请进行调整直至获得良好的平衡。
优化布局
RecyclerView
平放的布局设为
可能,不要嵌套过多的布局setHasFixedSize(true)
RecyclerView
RelativeLayout
作为RecyclerView
或您子项列表项的父项。答案 2 :(得分:1)
<application
android:name="com.yourpackagename"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
只需在项目清单文件中将hardwareAccelerated添加为True
答案 3 :(得分:0)
MapView是一个相当沉重的视图,当你试图在屏幕上获得一堆它们时,app会在滚动时变得迟钝。您可以将纬度和经度等数据作为字符串传递,其中一些静态变量取自下面提到的链接。你可以从Facebook API获得坐标。 这是api链接https://developers.google.com/maps/documentation/staticmaps/。
String getMapURL = "http://maps.googleapis.com/maps/api/staticmap?zoom=
18&size=560x240&markers=size:mid|color:red|"
+ JOLocation.getString("latitude") + "," + JOLocation.getString("longitude")
+ "&sensor=false";
当您在浏览器中使用时,上面构造的URL会返回.PNG文件。 此链接中讨论了类似类型的问题MapView in Listview。希望它有所帮助