- start MapWorkers at end of init
- check for screensize > 0 in updateMap
This commit is contained in:
Hannes Janetzek 2012-09-18 16:50:56 +02:00
parent e54e6e1c46
commit 6ee2a85e12
5 changed files with 53 additions and 39 deletions

View File

@ -18,7 +18,7 @@ package org.oscim.utils;
* An abstract base class for threads which support pausing and resuming. * An abstract base class for threads which support pausing and resuming.
*/ */
public abstract class PausableThread extends Thread { public abstract class PausableThread extends Thread {
private boolean mPausing; private boolean mPausing = true;
private boolean mShouldPause; private boolean mShouldPause;
/** /**

View File

@ -116,7 +116,8 @@ public abstract class MapActivity extends Activity {
GeoPoint geoPoint = new GeoPoint(latitudeE6, longitudeE6); GeoPoint geoPoint = new GeoPoint(latitudeE6, longitudeE6);
MapPosition mapPosition = new MapPosition(geoPoint, (byte) zoomLevel, 1); MapPosition mapPosition = new MapPosition(geoPoint, (byte) zoomLevel, 1);
mapView.setMapCenter(mapPosition); mMapView.getMapViewPosition().setMapCenter(mapPosition);
// mapView.setMapCenter(mapPosition);
} }
String theme = sharedPreferences.getString(KEY_THEME, String theme = sharedPreferences.getString(KEY_THEME,

View File

@ -38,8 +38,8 @@ import org.oscim.theme.Theme;
import org.oscim.view.generator.JobQueue; import org.oscim.view.generator.JobQueue;
import org.oscim.view.generator.JobTile; import org.oscim.view.generator.JobTile;
import org.oscim.view.generator.MapWorker; import org.oscim.view.generator.MapWorker;
import org.oscim.view.renderer.TileGenerator;
import org.oscim.view.renderer.MapRenderer; import org.oscim.view.renderer.MapRenderer;
import org.oscim.view.renderer.TileGenerator;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import android.content.Context; import android.content.Context;
@ -163,7 +163,6 @@ public class MapView extends FrameLayout {
mMapDatabase = mapDatabase; mMapDatabase = mapDatabase;
mMapWorkers[i] = new MapWorker(i, mJobQueue, tileGenerator, mMapRenderer); mMapWorkers[i] = new MapWorker(i, mJobQueue, tileGenerator, mMapRenderer);
mMapWorkers[i].start();
} }
mapActivity.registerMapView(this); mapActivity.registerMapView(this);
@ -190,6 +189,10 @@ public class MapView extends FrameLayout {
mMapZoomControls.setShowMapZoomControls(true); mMapZoomControls.setShowMapZoomControls(true);
enableRotation = true; enableRotation = true;
for (MapWorker worker : mMapWorkers)
worker.start();
} }
/** /**
@ -221,10 +224,16 @@ public class MapView extends FrameLayout {
* Calculates all necessary tiles and adds jobs accordingly. * Calculates all necessary tiles and adds jobs accordingly.
*/ */
public void redrawMap() { public void redrawMap() {
if (mPausing || this.getWidth() == 0 || this.getHeight() == 0)
return;
mMapRenderer.updateMap(false); mMapRenderer.updateMap(false);
} }
public void clearAndRedrawMap() { public void clearAndRedrawMap() {
if (mPausing || this.getWidth() == 0 || this.getHeight() == 0)
return;
mMapRenderer.updateMap(true); mMapRenderer.updateMap(true);
} }
@ -462,18 +471,28 @@ public class MapView extends FrameLayout {
} }
} }
private boolean mPausing = false;
void onPause() { void onPause() {
mapWorkersPause(false); mPausing = true;
Log.d(TAG, "onPause");
mJobQueue.clear();
mapWorkersPause(true);
if (this.enableCompass) if (this.enableCompass)
mCompass.disable(); mCompass.disable();
} }
void onResume() { void onResume() {
Log.d(TAG, "onResume");
mapWorkersProceed(); mapWorkersProceed();
if (this.enableCompass) if (this.enableCompass)
mCompass.enable(); mCompass.enable();
mPausing = false;
} }
/** /**

View File

@ -33,32 +33,7 @@ import android.util.Log;
public class MapRenderer extends GLSurfaceView { public class MapRenderer extends GLSurfaceView {
private final static String TAG = "MapRenderer"; private final static String TAG = "MapRenderer";
private GLRenderer mRenderer;
public MapRenderer(Context context, MapView mapView) {
super(context);
mMapView = mapView;
Log.d(TAG, "init GLSurfaceLayer");
setEGLConfigChooser(new GlConfigChooser());
setEGLContextClientVersion(2);
// setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS);
mRenderer = new GLRenderer(mMapView);
setRenderer(mRenderer);
//
// if (!debugFrameTime)
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
mJobList = new ArrayList<JobTile>();
mTiles = new ArrayList<MapTile>();
mTilesLoaded = new ArrayList<MapTile>(30);
ShortPool.init();
QuadTree.init();
mInitial = true;
}
private static final int MAX_TILES_IN_QUEUE = 40; private static final int MAX_TILES_IN_QUEUE = 40;
@ -85,6 +60,32 @@ public class MapRenderer extends GLSurfaceView {
private static TilesData newTiles; private static TilesData newTiles;
public MapRenderer(Context context, MapView mapView) {
super(context);
mMapView = mapView;
Log.d(TAG, "init GLSurfaceLayer");
setEGLConfigChooser(new GlConfigChooser());
setEGLContextClientVersion(2);
// setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS);
mRenderer = new GLRenderer(mMapView);
setRenderer(mRenderer);
// if (!debugFrameTime)
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
mJobList = new ArrayList<JobTile>();
mTiles = new ArrayList<MapTile>();
mTilesLoaded = new ArrayList<MapTile>(30);
ShortPool.init();
QuadTree.init();
mInitial = true;
}
/** /**
* called by MapView when position or map settings changes * called by MapView when position or map settings changes
*/ */
@ -511,13 +512,6 @@ public class MapRenderer extends GLSurfaceView {
} }
private GLRenderer mRenderer;
@Override
public void onPause() {
super.onPause();
}
@Override @Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) { protected void onSizeChanged(int w, int h, int oldw, int oldh) {

View File

@ -98,7 +98,7 @@ public class TileGenerator implements IRenderCallback, IMapDatabaseCallback {
* the MapView * the MapView
*/ */
public TileGenerator(MapView mapView) { public TileGenerator(MapView mapView) {
Log.d(TAG, "init DatabaseRenderer"); Log.d(TAG, "init TileGenerator");
mMapView = mapView; mMapView = mapView;
} }