/************************************************************************* * Copyright (c) 2015 Lemberg Solutions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. **************************************************************************/ package com.ls.demo.demo1; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.graphics.Color; import android.graphics.Point; import android.graphics.drawable.BitmapDrawable; import android.location.Location; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import com.ls.widgets.map.MapWidget; import com.ls.widgets.map.config.MapGraphicsConfig; import com.ls.widgets.map.config.OfflineMapConfig; import com.ls.widgets.map.events.MapScrolledEvent; import com.ls.widgets.map.events.MapTouchedEvent; import com.ls.widgets.map.interfaces.Layer; import com.ls.widgets.map.interfaces.MapEventsListener; import com.ls.widgets.map.interfaces.OnLocationChangedListener; import com.ls.widgets.map.interfaces.OnMapScrollListener; import com.ls.widgets.map.interfaces.OnMapTouchListener; import com.ls.widgets.map.model.MapObject; import com.ls.widgets.map.utils.PivotFactory; import com.ls.widgets.map.utils.PivotFactory.PivotPosition; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Random; public class ExBrowseMapActivity extends Activity { /** Called when the activity is first created. */ private MapWidget mapWidget; private Thread animationThread; private boolean stopThreads; public static final long LAYER_A = 1000; public static final long LAYER_B = 2000; public static final long LAYER_C = 3000; public static final long PIN_LAYER = 4000; private int amplitude = 400; private float currX = 0; private float currY = 0; private boolean followPointer; public static final long[] LAYERS = new long[]{}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); stopThreads = false; followPointer = true; File dir = Environment.getExternalStorageDirectory(); Log.d("ExBrowseActivity", "External Storage Directory: " + Environment.getDataDirectory().getAbsolutePath() + "/maps/grid2"); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); Log.d("ExBrowseActivity", "Window format is: " + getWindow().getAttributes().format); LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout); layout.setBackgroundColor(0xFFFFFFFF); mapWidget = new MapWidget(savedInstanceState, this, new File("/sdcard/maps/grid2"),12); mapWidget.createLayer(0); mapWidget.createLayer(1); mapWidget.setAnimationEnabled(true); mapWidget.setZoomButtonsVisible(true); MapGraphicsConfig gconfig = mapWidget.getMapGraphicsConfig(); if (gconfig != null) { gconfig.setAccuracyAreaBorderColor(Color.RED); gconfig.setAccuracyAreaColor(0x4400FF00); } mapWidget.setOnMapTouchListener(new OnMapTouchListener() { @Override public void onTouch(MapWidget v, MapTouchedEvent event) { AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext()); builder.setMessage("OnTouch, X: " + event.getScreenX() + " Y: " + event.getScreenY() + " MAPX: " + event.getMapX() + " MAPY: " + event.getMapY() + " Touched Count: " + event.getTouchedObjectIds().size()); builder.create().show(); } }); mapWidget.setOnMapScrolledListener(new OnMapScrollListener() { @Override public void onScrolledEvent(MapWidget v, MapScrolledEvent event) { if (event.isByUser()) { followPointer = false; } } }); mapWidget.setMinZoomLevel(1); mapWidget.setMaxZoomLevel(12); // mapWidget.setZoomButtonsVisible(true); // mapWidget.setScale(2.0f); layout.addView(mapWidget); mapWidget.addMapEventsListener(new MapEventsListener() { public void onPreZoomOut() { Log.i("BrowseMapActivity", "On Map will zoom out"); } public void onPreZoomIn() { Log.i("BrowseMapActivity", "On Map will zoom in"); } public void onPostZoomOut() { Log.i("BrowseMapActivity", "On Map did zoom out"); } public void onPostZoomIn() { Log.i("BrowseMapActivity", "On Map did zoom in"); } }); mapWidget.setOnLocationChangedListener(new OnLocationChangedListener() { @Override public void onLocationChanged(MapWidget v, Location location) { if (followPointer) { v.scrollMapTo(location); } } }); Runnable runnable = new Runnable() { @Override public void run() { generateRandomMarkers(); // BitmapDrawable image = (BitmapDrawable) getResources().getDrawable(R.drawable.maps_blue_dot); // if (image != null) { // Layer layer = mapWidget.getLayerById(PIN_LAYER); // MapObject object = new MapObject(PIN_ID, image, new Point(500, 250), PivotFactory.createPivotPoint(image, PivotPosition.PIVOT_CENTER), false, true); // layer.addMapObject(object); // layer.setVisible(true); // } } }; Thread thread = new Thread(runnable); thread.setPriority(Thread.MIN_PRIORITY); thread.run(); OfflineMapConfig config = mapWidget.getConfig(); if (config != null) { config.setFlingEnabled(true); config.setMapCenteringEnabled(false); } //layout.removeView(mapWidget); //mapWidget.setShowMyPosition(true); mapWidget.centerMap(); } private void generateRandomMarkers() { try { final int GREEN_POINT_COUNT = 100; final int BLUE_POINT_COUNT = GREEN_POINT_COUNT; final int MAP_WIDTH = 1500; final int MAP_HEIGHT = 900; InputStream is = getAssets().open("other/trail_difficulty_green_circle.png"); BitmapDrawable drawable = new BitmapDrawable(is); is.close(); Random random = new Random(System.currentTimeMillis()); Layer layer = mapWidget.getLayer(0); for (int i = 0; i < GREEN_POINT_COUNT; ++i) { int randW = random.nextInt(MAP_WIDTH); int randH = random.nextInt(MAP_HEIGHT); BitmapDrawable dr = new BitmapDrawable(drawable.getBitmap()); MapObject object = new MapObject(Integer.valueOf(random.nextInt(1000)), dr, randW, randH, false); layer.addMapObject(object); //layer.addTouchable(new Integer(random.nextInt(1000)), dr, randW, randH); } is = getAssets().open("other/trail_difficulty_blue_rect.png"); drawable = new BitmapDrawable(is); is.close(); layer = mapWidget.getLayer(1); for (int i = 0; i < BLUE_POINT_COUNT; ++i) { int randW = random.nextInt(MAP_WIDTH); int randH = random.nextInt(MAP_HEIGHT); BitmapDrawable dr = new BitmapDrawable(drawable.getBitmap()); MapObject object = new MapObject(Integer.valueOf((random.nextInt(1000))), dr, new Point(randW, randH), PivotFactory.createPivotPoint(dr, PivotPosition.PIVOT_CENTER), true, false); layer.addMapObject(object); // layer.addTouchable(new Integer(random.nextInt(1000)), dr, new Point(randW, randH), PivotFactory.createPivotPoint(dr, PivotPosition.PIVOT_CENTER), false); // mapWidget.addDrawable(dr, randW, randH); } } catch (IOException e) { Log.e("TileManagerWorkerThread", "Exception: " + e); e.printStackTrace(); } } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.map_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection int i = item.getItemId(); if (i == R.id.zoom_in) { try { mapWidget.zoomIn(); mapWidget.scrollMapTo(1500, 700); } catch (Exception e) { Log.e("BrowseMapActivity", "Exception while zoom in. " + e); } return true; } else if (i == R.id.zoom_out) { try { mapWidget.zoomOut(); } catch (Exception e) { Log.e("BrowseMapActivity", "Exception while zoom out. " + e); } return true; } else if (i == R.id.double_size) { mapWidget.setScale(2.0f); return true; } else if (i == R.id.original_size) { mapWidget.setScale(1.0f); return true; } else if (i == R.id.half_size) { mapWidget.setScale(0.5f); return true; } else if (i == R.id.open_map) { Intent intent = new Intent(this, ExBrowseMapActivity.class); startActivity(intent); return true; } else if (i == R.id.my_location) { //mapWidget.scrollToCurrentLocation(); //followPointer = true; mapWidget.centerMap(); return true; } else { return super.onOptionsItemSelected(item); } } private void animatePin() { // if (animationThread == null || (animationThread != null && !animationThread.isAlive())) { // animationThread = new Thread(new Runnable() { // @Override // public void run() { // // MapObject pin = mapWidget.getLayerById(PIN_LAYER).getMapObject(PIN_ID); // // if (pin == null) { // Log.e("PIN", "Pin not foind"); // } // // while (!stopThreads) { // currX += 0.01; // currY += 0.01; // // if (pin != null) { // pin.moveTo((int)(700 + Math.sin(currX) * amplitude), (int)(350 + Math.cos(currY)*250)); // } // // try { // Thread.sleep(50); // } catch (InterruptedException e) { // e.printStackTrace(); // return; // } // } // // } // }); // // animationThread.start(); // } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Layer layer = null; switch (keyCode) { case KeyEvent.KEYCODE_1: layer = mapWidget.getLayer(0); break; case KeyEvent.KEYCODE_2: layer = mapWidget.getLayer(1); break; } if (layer != null) { layer.setVisible(!layer.isVisible()); return true; } else return super.onKeyDown(keyCode, event); } @Override protected void onStop() { stopThreads = true; super.onStop(); } @Override protected void onPause() { super.onPause(); } @Override protected void onDestroy() { //mapWidget.destroy(); super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { mapWidget.saveState(outState); super.onSaveInstanceState(outState); } };