All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mapsforge.applications.android.samples.TileSizeChanger Maven / Gradle / Ivy

/*
 * Copyright 2014 Ludwig M Brinckmann
 * Copyright 2014, 2015 devemux86
 *
 * This program is free software: you can redistribute it and/or modify it under the
 * terms of the GNU Lesser General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with
 * this program. If not, see .
 */
package org.mapsforge.applications.android.samples;

import org.mapsforge.map.android.util.AndroidUtil;
import org.mapsforge.map.layer.renderer.TileRendererLayer;
import org.mapsforge.map.util.PausableThread;

/**
 * Demonstration of changing between fixed and computed tile sizes.
 */
public class TileSizeChanger extends RenderTheme4 {

	private class ChangerThread extends PausableThread {
		private static final int ROTATION_TIME = 10000;

		@Override
		protected void doWork() throws InterruptedException {
			sleep(ROTATION_TIME);
			TileSizeChanger.this.changeTileSize();
		}

		@Override
		protected ThreadPriority getThreadPriority() {
			return ThreadPriority.ABOVE_NORMAL;
		}

		@Override
		protected boolean hasWork() {
			return true;
		}

	}

	private ChangerThread changerThread;
	private int iteration;

	private TileRendererLayer tileRendererLayer;

	@Override
	protected void createControls() {
		super.createControls();
		this.changerThread = new ChangerThread();
		this.changerThread.start();
	}

	@Override
	protected void createLayers() {
		tileRendererLayer = AndroidUtil.createTileRendererLayer(this.tileCaches.get(0),
				this.mapView.getModel().mapViewPosition, getMapFile(), getRenderTheme(),
				false, true);
		this.mapView.getLayerManager().getLayers().add(tileRendererLayer);
	}

	void changeTileSize() {
		Integer[] tileSizes = { 256, 120, 0, 120};

		if (tileSizes.length > 0) {
			iteration += 1;
			// destroy and recreate the tile caches so that old storage is
			// freed and a new tile cache is created based on the new tile size
			mapView.getLayerManager().getLayers().remove(tileRendererLayer);
			tileRendererLayer.onDestroy();
			purgeTileCaches();

			int tileSize = tileSizes[iteration % tileSizes.length];
			this.mapView.getModel().displayModel.setFixedTileSize(tileSize);

			createTileCaches();
			createLayers();

			this.mapView.getMapScaleBar().redrawScaleBar();
			this.mapView.getLayerManager().redrawLayers();
		}
	}

	@Override
	protected void onDestroy() {
		this.changerThread.interrupt();
		super.onDestroy();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy