我想在Google Map上显示大量标记(50k +).事实证明,Android Maps Util Library https://github.com/googlemaps/android-maps-utils似乎是群集标记时的首选.
我想知道是否存在任何最佳实践,以便在显示如此大量的标记时提高地图用户体验的性能.
例
例如,我使用群集管理器向群集管理器添加大约20.000个标记,从而在缩放和平移地图时导致不太平滑的地图交互体验.
我用过的:
GridBasedAlgorithm<MyClusterItem> gridAlgorithm = new GridBasedAlgorithm<MyClusterItem>();
mClusterManager.setAlgorithm(new PreCachingAlgorithmDecorator<MyClusterItem>(gridAlgorithm));
Run Code Online (Sandbox Code Playgroud)
我的策略:
1)在相机更改事件中从群集器中删除所有标记,然后仅添加视图边界内的那些标记.在高缩放级别上工作得很好,当缩放级别降低时,有许多标记要移除和添加,从而增加了整个聚类过程的开销
2)首先添加所有标记.
我想实现以下布局:
我列举了一个如何看待它的例子.
我在Cheesesquare上关注了CollapsingToolbarLayout和AppBarLayout实现的这个很好的例子 .我设法让内容使用CollapsingToolbarLayout内的地图(在布局xml中注释掉),但这不是理想的结果.
但是我没有找到任何解决方案/文档来使灰色框(见中间的内部图像)在初始位置是透明的.我希望它是透明的,以便看到地图.当用户向上滚动时,CollapsingToolbarLaoyut应该正常工作并折叠透明窗口并显示工具栏.现在,图像看起来只是白色或我给它的任何颜色.我已经尝试将颜色设置为透明,但它没有达到预期的效果.
所以我的问题是:如何在初始阶段将"CollapsingToolbarLayout"设置为透明(参见图像第1层灰框)?
这是我的布局代码.CollapsingToolbarLayout效果很好,但我看不到下面的地图.如果有可能实施将会很棒.
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- Layer 0 -->
<FrameLayout
android:id="@+id/overlayFragmentMap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="0dip"
/>
<!-- Layer 1 -->
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="192dp"
android:fitsSystemWindows="true"
android:theme="@style/CustomActionBar">
<!--android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar-->
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorAccent"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:expandedTitleTextAppearance="@color/black"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<!-- Map view inside here works perfectly but is not
the deisired result -->
<!--
<FrameLayout
android:id="@+id/overlayFragmentMap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="0dip"
app:layout_collapseMode="parallax"
/>
-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@drawable/transparent" …Run Code Online (Sandbox Code Playgroud) android transparent android-layout android-collapsingtoolbarlayout
我想将我的项目升级到Android Studio 3.0 Canary 1和gradle:3.0.0-alpha1插件,但是我对包含项目的正确风味定义有疑问.
我按照Google的官方迁移指南进行了操作:https://developer.android.com/studio/preview/features/new-android-plugin-migration.html
在我的主应用程序build.gradle中,我按照迁移指南的建议定义了"myflavor" flavorDimensions:
android {
flavorDimensions "myflavor"
productFlavors {
dev {
dimension "myflavor"
minSdkVersion 21
}
prod {
dimension "myflavor"
minSdkVersion 16
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
debuggable false
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dependencies {
compile project(':util')
}
Run Code Online (Sandbox Code Playgroud)
在我的included:util模块(生产者)中,我尝试在没有flavorDimensions,productFlavors和buildTypes定义的情况下包含它.我收到以下gradle错误:
Error:Could not resolve all dependencies for configuration ':app:prodDebugCompileClasspath'.
Cannot choose between the following configurations on project :util:
- debugApiElements
- releaseApiElements …Run Code Online (Sandbox Code Playgroud) 我想在Google Maps V2上显示CustomOverlay.瓷砖的装载按预期工作,唯一的是,所显示的瓷砖看起来并不尖锐,有点模糊.谷歌没有让我得到一个有用的答案.
我采用了为TileProvider添加经典256px x 256px磁贴的方法.我设法获得了一个图像为@ 2x(视网膜)的图像源,这使得整个视觉体验更加清晰,但我宁愿不使用此源,因为数据传输速率高四倍,因此无法在移动设备上使用设备和慢速的互联网速度.
我包含了渲染地图的两个不同示例(屏幕截图),两个都具有相同的配置(OSM - 256x256磁贴)和提供的TileProviderOsm.一个是Galaxy Nexus,另一个是Nexus 5手机.两者看起来都不正确.
知道我能做些什么来防止模糊或增加锐度?
我的TileProvider如下所示:
public class TileProviderOsm extends UrlTileProvider {
private static final String MAP_URL = "http://tile.openstreetmap.org/%d/%d/%d.png";
private static int TILE_WIDTH = 256;
private static int TILE_HEIGHT = 256;
public static int MIN_ZOOM = 7;
public static int MAX_ZOOM = 15;
public TileProviderOsm() {
super(TILE_WIDTH, TILE_HEIGHT);
}
@Override
public synchronized URL getTileUrl(int x, int y, int zoom) {
String s = String.format(Locale.US, MAP_URL, zoom, x, y);
URL url = null; …Run Code Online (Sandbox Code Playgroud)