如何将图块添加到谷歌地图并为其设置动画,即不断用新图块替换它们
Posted
技术标签:
【中文标题】如何将图块添加到谷歌地图并为其设置动画,即不断用新图块替换它们【英文标题】:How to add tiles to google map and animating them i.e replacing them wiith new tiles continuously 【发布时间】:2016-08-13 10:15:08 【问题描述】:我正在从缓存中向 Google 地图添加多个 TileOverlay。当尝试使用处理程序通过更改它们的可见性来为它们设置动画时,在第一次播放期间地图上的叠加层会闪烁。
还有其他方法可以实现吗?
public class LocalTileProvider implements TileProvider
private String url;
DatabaseHelper db;
String type;
// private Paint opacityPaint = new Paint();
String newurl= PathFinder.rainradar_HDBaseurl;
String uid;
public LocalTileProvider(String uid,DatabaseHelper cache,String type)
this.uid=uid;
this.db=cache;
this.type=type;
//taking the tile from SQLITEDATABASE
@Override
public Tile getTile(int x, int y, int zoom)
Tile tile = null;
if(db.ispresent(uid, zoom,x , y,type))
byte[] b=db.gettiles(uid, zoom,x , y,type);
tile = new Tile(256, 256, b);
return tile;
return NO_TILE;
以下是将这些图块添加到 Google 地图的代码
LocalTileProvider provider1 = new LocalTileProvider(uidList.get(0), db, TAG);
TileOverlayOptions top1 = new TileOverlayOptions().tileProvider(provider1).visible(true);
tileoverlay_1 = googleMap.addTileOverlay(top1);
添加它们后,我通过切换图块的可见性来使用处理程序播放动画
public void start()
btn_play.setEnabled(true);
tileoverlay_default.setVisible(false);
runnable_animation = new Runnable()
@Override
public void run()
//tileoverlay_default.setVisible(false);
isDownloading = false;
// stop_download=true;
isRunning = true;
btn_play.setBackgroundResource(R.drawable.player_pause_2x);
setVisibility(global);
if (global == 11)
global = 0;
else
global = global + 1;
mHandler_animation.postDelayed(this, 1000);
;
mHandler_animation.post(runnable_animation);
【问题讨论】:
请不要重复问同一个问题。这被认为是 Stack Overflow 上的噪音。如果您的问题因无法回答或没有引起回复而关闭,那么首先要做的是改进问题;对此的一些指导是given here。低质量或无法回答的问题通常会被关闭,但如果得到改进或澄清(视情况而定),可以重新打开。 @user2197811 你找到解决方案了吗?这是谷歌地图的一个重大问题,我也找不到解决方案。 【参考方案1】:我知道这是一个非常古老的问题,但如果有人正在寻找这个问题的答案,我想我可能会发布我的答案。
当您将 TileOverlay 添加到地图时,它闪烁的原因有两个。
-
切片未缓存,必须加载
图块正在淡入(默认行为)
从您的代码的外观来看,您正在缓存磁贴,因此阻止它们闪烁所需要做的就是关闭淡入行为:
LocalTileProvider provider1 = new LocalTileProvider(uidList.get(0), db, TAG);
TileOverlayOptions top1 = new TileOverlayOptions().tileProvider(provider1).visible(true);
TileOverlay newTileOverlay = map.addTileOverlay(overlay);
tileoverlay_1 = googleMap.addTileOverlay(top1);
tileoverlay_1.setFadeIn(false); //Stop cached tiles from flickering in
【讨论】:
【参考方案2】:public class LocalTileProvider implements TileProvider
private String url;
DatabaseHelper db;
String type;
// private Paint opacityPaint = new Paint();
String newurl= PathFinder.rainradar_HDBaseurl;
String uid;
public LocalTileProvider(String uid,DatabaseHelper cache,String type)
this.uid=uid;
this.db=cache;
this.type=type;
//taking the tile from SQLITEDATABASE
@Override
public Tile getTile(int x, int y, int zoom)
Tile tile = null;
if(db.ispresent(uid, zoom,x , y,type))
byte[] b=db.gettiles(uid, zoom,x , y,type);
tile = new Tile(256, 256, b);
return tile;
return NO_TILE;
【讨论】:
【参考方案3】:Gmaps 在添加新的 TileOverlay 时总是会出现一些“闪烁”。 你有两个选择:
在旧的叠加层上添加“新”叠加层,并仅在第一个加载时删除/隐藏旧叠加层(我不记得是否有回调) 第一次添加所有 TileProviders,将第一个设置为可见(true),其他设置为可见 false(如果您已经在第一次添加了所有提供程序,我无法从您的代码中获取)【讨论】:
是的,我在乞讨中添加所有的提供者,然后在玩 tileoverlay 的可见性以上是关于如何将图块添加到谷歌地图并为其设置动画,即不断用新图块替换它们的主要内容,如果未能解决你的问题,请参考以下文章