refactor TileLayer:
- set specific TileRenderer in sub-class constructor - remove TileLoader generics from TileLayer
This commit is contained in:
parent
5cffe3a3b3
commit
adb56c7613
@ -36,7 +36,7 @@ public class PathOverlayActivity extends BitmapTileMapActivity {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
mBitmapLayer.getTileRenderer().setBitmapAlpha(0.5f);
|
||||
mBitmapLayer.tileRenderer().setBitmapAlpha(0.5f);
|
||||
|
||||
createLayers(1, true);
|
||||
|
||||
|
@ -147,7 +147,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
||||
}
|
||||
}
|
||||
|
||||
public void setTileDataSource(ITileDataSource mapDatabase) {
|
||||
public void setDataSource(ITileDataSource mapDatabase) {
|
||||
if (mTileDataSource != null)
|
||||
mTileDataSource.destroy();
|
||||
|
||||
|
@ -30,6 +30,7 @@ import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.tiling.MapTile;
|
||||
import org.oscim.tiling.TileLoader;
|
||||
import org.oscim.tiling.TileManager;
|
||||
import org.oscim.tiling.TileRenderer;
|
||||
import org.oscim.tiling.source.ITileDataSink;
|
||||
import org.oscim.tiling.source.ITileDataSource;
|
||||
import org.oscim.tiling.source.ITileDataSource.QueryResult;
|
||||
@ -38,7 +39,7 @@ import org.oscim.utils.FastMath;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class BitmapTileLayer extends TileLayer<TileLoader> {
|
||||
public class BitmapTileLayer extends TileLayer {
|
||||
|
||||
protected static final Logger log = LoggerFactory.getLogger(BitmapTileLayer.class);
|
||||
|
||||
@ -65,7 +66,8 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
|
||||
public BitmapTileLayer(Map map, TileSource tileSource, int cacheLimit) {
|
||||
super(map, tileSource.getZoomLevelMin(), tileSource.getZoomLevelMax(), cacheLimit);
|
||||
mTileSource = tileSource;
|
||||
initLoader();
|
||||
setRenderer(new TileRenderer(mTileManager));
|
||||
initLoader(4);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -96,7 +98,7 @@ public class BitmapTileLayer extends TileLayer<TileLoader> {
|
||||
break;
|
||||
}
|
||||
|
||||
mRenderLayer.setBitmapAlpha(alpha);
|
||||
tileRenderer().setBitmapAlpha(alpha);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,18 +16,18 @@
|
||||
*/
|
||||
package org.oscim.layers.tile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.oscim.core.MapPosition;
|
||||
import org.oscim.layers.Layer;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.map.Map.UpdateListener;
|
||||
import org.oscim.tiling.TileLoader;
|
||||
import org.oscim.tiling.TileManager;
|
||||
import org.oscim.tiling.TileRenderer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public abstract class TileLayer<T extends TileLoader> extends Layer implements Map.UpdateListener {
|
||||
public abstract class TileLayer extends Layer implements UpdateListener {
|
||||
|
||||
static final Logger log = LoggerFactory.getLogger(TileLayer.class);
|
||||
|
||||
private final static int MAX_ZOOMLEVEL = 17;
|
||||
@ -35,10 +35,8 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
|
||||
private final static int CACHE_LIMIT = 150;
|
||||
|
||||
protected final TileManager mTileManager;
|
||||
protected final TileRenderer mRenderLayer;
|
||||
|
||||
protected final int mNumTileLoader = 4;
|
||||
protected final ArrayList<T> mTileLoader;
|
||||
protected TileLoader[] mTileLoader;
|
||||
|
||||
public TileLayer(Map map) {
|
||||
this(map, MIN_ZOOMLEVEL, MAX_ZOOMLEVEL, CACHE_LIMIT);
|
||||
@ -46,39 +44,36 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
|
||||
|
||||
public TileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) {
|
||||
super(map);
|
||||
|
||||
// TileManager responsible for adding visible tiles
|
||||
// to load queue and managing in-memory tile cache.
|
||||
/* TileManager responsible for adding visible tiles
|
||||
* to load queue and managing in-memory tile cache. */
|
||||
mTileManager = new TileManager(map, minZoom, maxZoom, cacheLimit);
|
||||
|
||||
// Instantiate TileLoader threads
|
||||
mTileLoader = new ArrayList<T>();
|
||||
|
||||
// RenderLayer is working in GL Thread and actually
|
||||
// drawing loaded tiles to screen.
|
||||
mRenderer = mRenderLayer = new TileRenderer(mTileManager);
|
||||
}
|
||||
|
||||
protected void initLoader() {
|
||||
for (int i = 0; i < mNumTileLoader; i++) {
|
||||
T tileGenerator = createLoader(mTileManager);
|
||||
mTileLoader.add(tileGenerator);
|
||||
tileGenerator.start();
|
||||
}
|
||||
abstract protected TileLoader createLoader(TileManager tm);
|
||||
|
||||
protected void setRenderer(TileRenderer renderer) {
|
||||
mRenderer = renderer;
|
||||
}
|
||||
|
||||
abstract protected T createLoader(TileManager tm);
|
||||
|
||||
public TileRenderer getTileRenderer() {
|
||||
public TileRenderer tileRenderer() {
|
||||
return (TileRenderer) mRenderer;
|
||||
}
|
||||
|
||||
protected void initLoader(int numLoaders) {
|
||||
mTileLoader = new TileLoader[numLoaders];
|
||||
|
||||
for (int i = 0; i < numLoaders; i++) {
|
||||
mTileLoader[i] = createLoader(mTileManager);
|
||||
mTileLoader[i].start();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMapUpdate(MapPosition mapPosition, boolean changed, boolean clear) {
|
||||
if (clear) {
|
||||
// sync with TileRenderer
|
||||
synchronized (mRenderLayer) {
|
||||
mRenderLayer.clearTiles();
|
||||
synchronized (mRenderer) {
|
||||
tileRenderer().clearTiles();
|
||||
mTileManager.init();
|
||||
}
|
||||
|
||||
@ -91,7 +86,7 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
|
||||
|
||||
@Override
|
||||
public void onDetach() {
|
||||
for (T loader : mTileLoader) {
|
||||
for (TileLoader loader : mTileLoader) {
|
||||
loader.pause();
|
||||
loader.interrupt();
|
||||
loader.cleanup();
|
||||
@ -99,27 +94,26 @@ public abstract class TileLayer<T extends TileLoader> extends Layer implements M
|
||||
}
|
||||
|
||||
void notifyLoaders() {
|
||||
for (int i = 0; i < mNumTileLoader; i++) {
|
||||
mTileLoader.get(i).go();
|
||||
}
|
||||
for (TileLoader loader : mTileLoader)
|
||||
loader.go();
|
||||
}
|
||||
|
||||
protected void pauseLoaders(boolean wait) {
|
||||
for (T loader : mTileLoader) {
|
||||
for (TileLoader loader : mTileLoader) {
|
||||
if (!loader.isPausing())
|
||||
loader.pause();
|
||||
}
|
||||
if (!wait)
|
||||
return;
|
||||
|
||||
for (T loader : mTileLoader) {
|
||||
for (TileLoader loader : mTileLoader) {
|
||||
if (!loader.isPausing())
|
||||
loader.awaitPausing();
|
||||
}
|
||||
}
|
||||
|
||||
protected void resumeLoaders() {
|
||||
for (T loader : mTileLoader)
|
||||
for (TileLoader loader : mTileLoader)
|
||||
loader.proceed();
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,6 @@ import org.oscim.backend.canvas.Paint.Cap;
|
||||
import org.oscim.core.GeometryBuffer;
|
||||
import org.oscim.core.Tile;
|
||||
import org.oscim.layers.tile.TileLayer;
|
||||
import org.oscim.layers.tile.example.TestTileLayer.TestTileLoader;
|
||||
import org.oscim.map.Map;
|
||||
import org.oscim.renderer.elements.ElementLayers;
|
||||
import org.oscim.renderer.elements.LineLayer;
|
||||
@ -32,7 +31,7 @@ import org.oscim.tiling.TileManager;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class TestTileLayer extends TileLayer<TestTileLoader> {
|
||||
public class TestTileLayer extends TileLayer {
|
||||
static final Logger log = LoggerFactory.getLogger(TestTileLayer.class);
|
||||
|
||||
public TestTileLayer(Map map) {
|
||||
|
@ -29,7 +29,7 @@ public class BuildingLayer extends Layer {
|
||||
|
||||
public BuildingLayer(Map map, VectorTileLayer tileLayer) {
|
||||
super(map);
|
||||
mExtLayer = new ExtrusionRenderer(tileLayer.getTileRenderer()) {
|
||||
mExtLayer = new ExtrusionRenderer(tileLayer.tileRenderer()) {
|
||||
private long mStartTime;
|
||||
|
||||
@Override
|
||||
|
@ -21,7 +21,7 @@ import org.oscim.map.Map;
|
||||
import org.oscim.theme.IRenderTheme;
|
||||
import org.oscim.tiling.TileLoader;
|
||||
import org.oscim.tiling.TileManager;
|
||||
import org.oscim.tiling.source.ITileDataSource;
|
||||
import org.oscim.tiling.TileRenderer;
|
||||
import org.oscim.tiling.source.TileSource;
|
||||
import org.oscim.tiling.source.TileSource.OpenResult;
|
||||
import org.slf4j.Logger;
|
||||
@ -32,19 +32,21 @@ import org.slf4j.LoggerFactory;
|
||||
* {@link VectorTileLoader} that load and assemble vector tiles
|
||||
* for rendering.
|
||||
*/
|
||||
public class VectorTileLayer extends TileLayer<VectorTileLoader> {
|
||||
public class VectorTileLayer extends TileLayer {
|
||||
static final Logger log = LoggerFactory.getLogger(VectorTileLayer.class);
|
||||
|
||||
private TileSource mTileSource;
|
||||
|
||||
public VectorTileLayer(Map map) {
|
||||
super(map);
|
||||
initLoader();
|
||||
setRenderer(new TileRenderer(mTileManager));
|
||||
initLoader(4);
|
||||
}
|
||||
|
||||
public VectorTileLayer(Map map, int minZoom, int maxZoom, int cacheLimit) {
|
||||
super(map, minZoom, maxZoom, cacheLimit);
|
||||
initLoader();
|
||||
setRenderer(new TileRenderer(mTileManager));
|
||||
initLoader(4);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -75,10 +77,8 @@ public class VectorTileLayer extends TileLayer<VectorTileLoader> {
|
||||
|
||||
mTileSource = tileSource;
|
||||
|
||||
for (int i = 0; i < mNumTileLoader; i++) {
|
||||
ITileDataSource tileDataSource = tileSource.getDataSource();
|
||||
mTileLoader.get(i).setTileDataSource(tileDataSource);
|
||||
}
|
||||
for (TileLoader l : mTileLoader)
|
||||
((VectorTileLoader) l).setDataSource(tileSource.getDataSource());
|
||||
|
||||
mMap.clearMap();
|
||||
resumeLoaders();
|
||||
@ -96,10 +96,10 @@ public class VectorTileLayer extends TileLayer<VectorTileLoader> {
|
||||
pauseLoaders(true);
|
||||
mTileManager.clearJobs();
|
||||
|
||||
for (VectorTileLoader g : mTileLoader)
|
||||
g.setRenderTheme(theme);
|
||||
for (TileLoader l : mTileLoader)
|
||||
((VectorTileLoader) l).setRenderTheme(theme);
|
||||
|
||||
mRenderLayer.setOverdrawColor(theme.getMapBackground());
|
||||
tileRenderer().setOverdrawColor(theme.getMapBackground());
|
||||
|
||||
resumeLoaders();
|
||||
}
|
||||
|
@ -158,7 +158,7 @@ public class VectorTileLoader extends TileLoader implements IRenderTheme.Callbac
|
||||
}
|
||||
}
|
||||
|
||||
public void setTileDataSource(ITileDataSource mapDatabase) {
|
||||
public void setDataSource(ITileDataSource mapDatabase) {
|
||||
if (mTileDataSource != null)
|
||||
mTileDataSource.destroy();
|
||||
|
||||
|
@ -43,7 +43,7 @@ public class LabelLayer extends Layer implements Map.InputListener, Map.UpdateLi
|
||||
super(map);
|
||||
l.getManager().events.bind(this);
|
||||
|
||||
mLabelPlacer = new LabelPlacement(map, l.getTileRenderer());
|
||||
mLabelPlacer = new LabelPlacement(map, l.tileRenderer());
|
||||
mWorker = new Worker(map);
|
||||
mRenderer = new TextRenderer(mWorker);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user