#826 - Renaming app module to MapboxGLAndroidSDKTestApp
97
android/java/MapboxGLAndroidSDKTestApp/build.gradle
Normal file
@@ -0,0 +1,97 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.0.0'
|
||||
classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.10.1'
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'android-sdk-manager'
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'checkstyle'
|
||||
|
||||
task accessToken {
|
||||
// def rawDir = new File("app/src/main/res/raw")
|
||||
// rawDir.mkdirs()
|
||||
def tokenFile = new File("MapboxGLAndroidSDKTestApp/src/main/res/raw/token.txt")
|
||||
if (!tokenFile.exists()) {
|
||||
String token = System.getenv('MAPBOX_ACCESS_TOKEN')
|
||||
if (token == null) {
|
||||
throw new InvalidUserDataException("You must set the MAPBOX_ACCESS_TOKEN environment variable.")
|
||||
}
|
||||
tokenFile.write(token)
|
||||
}
|
||||
}
|
||||
|
||||
gradle.projectsEvaluated {
|
||||
preBuild.dependsOn('accessToken')
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 21
|
||||
buildToolsVersion "21.1.2"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.mapbox.mapboxgl.app"
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
versionCode 4
|
||||
versionName "0.1.3"
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_7
|
||||
targetCompatibility JavaVersion.VERSION_1_7
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/LICENSE.txt'
|
||||
exclude 'META-INF/NOTICE.txt'
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
checkAllWarnings true
|
||||
disable 'UnusedAttribute'
|
||||
abortOnError false
|
||||
//disable 'IconDensities'
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile(project(':lib')) {
|
||||
transitive = true
|
||||
}
|
||||
compile 'com.android.support:support-annotations:21.0.0'
|
||||
compile 'com.android.support:support-v4:21.0.3'
|
||||
compile 'com.android.support:appcompat-v7:21.0.3'
|
||||
compile 'com.mapzen.android:lost:0.2'
|
||||
}
|
||||
|
||||
checkstyle {
|
||||
configFile project.file('../checks.xml')
|
||||
showViolations true
|
||||
}
|
||||
|
||||
android.applicationVariants.all { variant ->
|
||||
def name = variant.buildType.name
|
||||
def checkstyle = project.tasks.create "checkstyle${name.capitalize()}", Checkstyle
|
||||
checkstyle.dependsOn variant.javaCompile
|
||||
checkstyle.source variant.javaCompile.source
|
||||
checkstyle.classpath = project.fileTree(variant.javaCompile.destinationDir)
|
||||
checkstyle.exclude('**/BuildConfig.java')
|
||||
checkstyle.exclude('**/R.java')
|
||||
project.tasks.getByName("check").dependsOn checkstyle
|
||||
}
|
||||
34
android/java/MapboxGLAndroidSDKTestApp/lint.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<lint>
|
||||
<!-- Ignore errors caused by icon burning -->
|
||||
<issue id="IconLauncherShape" severity="ignore">
|
||||
<ignore path="res/drawable-mdpi/icon.png" />
|
||||
<ignore path="res/drawable-hdpi/icon.png" />
|
||||
<ignore path="res/drawable-xdpi/icon.png" />
|
||||
<ignore path="res/drawable-xxdpi/icon.png" />
|
||||
<ignore path="res/drawable-mdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-hdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-xdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-xxdpi/icon_burned.png" />
|
||||
</issue>
|
||||
<issue id="IconDuplicates" severity="ignore">
|
||||
<ignore path="res/drawable-mdpi/icon.png" />
|
||||
<ignore path="res/drawable-hdpi/icon.png" />
|
||||
<ignore path="res/drawable-xdpi/icon.png" />
|
||||
<ignore path="res/drawable-xxdpi/icon.png" />
|
||||
<ignore path="res/drawable-mdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-hdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-xdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-xxdpi/icon_burned.png" />
|
||||
</issue>
|
||||
<issue id="UnusedResources" severity="ignore">
|
||||
<ignore path="res/drawable-mdpi/icon.png" />
|
||||
<ignore path="res/drawable-hdpi/icon.png" />
|
||||
<ignore path="res/drawable-xdpi/icon.png" />
|
||||
<ignore path="res/drawable-xxdpi/icon.png" />
|
||||
<ignore path="res/drawable-mdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-hdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-xdpi/icon_burned.png" />
|
||||
<ignore path="res/drawable-xxdpi/icon_burned.png" />
|
||||
</issue>
|
||||
</lint>
|
||||
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.mapbox.mapboxgl.app">
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
|
||||
<application
|
||||
android:allowBackup="false"
|
||||
android:icon="@drawable/icon_burned"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme"
|
||||
android:supportsRtl="true">
|
||||
<activity
|
||||
android:name="com.mapbox.mapboxgl.app.MainActivity"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,379 @@
|
||||
package com.mapbox.mapboxgl.app;
|
||||
|
||||
import android.location.Location;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.ActionBarActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Spinner;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.mapbox.mapboxgl.lib.LonLatZoom;
|
||||
import com.mapbox.mapboxgl.lib.MapView;
|
||||
import com.mapzen.android.lost.LocationClient;
|
||||
import com.mapzen.android.lost.LocationListener;
|
||||
import com.mapzen.android.lost.LocationRequest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
|
||||
public class MainActivity extends ActionBarActivity {
|
||||
|
||||
//
|
||||
// Static members
|
||||
//
|
||||
|
||||
// Tag used for logging
|
||||
private static final String TAG = "MainActivity";
|
||||
|
||||
//
|
||||
// Instance members
|
||||
//
|
||||
|
||||
// Holds the MapFragment
|
||||
private MapFragment mMapFragment;
|
||||
|
||||
// The FPS label
|
||||
private TextView mFpsTextView;
|
||||
|
||||
// The compass
|
||||
private ImageView mCompassView;
|
||||
|
||||
// Used for GPS
|
||||
private boolean mIsGpsOn = false;
|
||||
private LocationClient mLocationClient;
|
||||
private LocationListener mLocationListener;
|
||||
private LocationRequest mLocationRequest;
|
||||
|
||||
// Used for the class spinner
|
||||
Spinner mClassSpinner;
|
||||
ArrayAdapter mOutdoorsClassAdapter;
|
||||
ArrayAdapter mSatelliteClassAdapter;
|
||||
|
||||
//
|
||||
// Lifecycle events
|
||||
//
|
||||
|
||||
// Called when activity is created
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Log.v(TAG, "onCreate");
|
||||
|
||||
// Load the layout
|
||||
setContentView(R.layout.activity_main);
|
||||
mMapFragment = (MapFragment)getSupportFragmentManager().findFragmentById(R.id.fragment_map);
|
||||
mMapFragment.getMap().setOnFpsChangedListener(new MyOnFpsChangedListener());
|
||||
mMapFragment.getMap().setOnMapChangedListener(new MyOnMapChangedListener());
|
||||
|
||||
mFpsTextView = (TextView)findViewById(R.id.view_fps);
|
||||
mFpsTextView.setText("");
|
||||
|
||||
mCompassView = (ImageView)findViewById(R.id.view_compass);
|
||||
mCompassView.setOnClickListener(new CompassOnClickListener());
|
||||
|
||||
// Add a toolbar as the action bar
|
||||
Toolbar mainToolbar = (Toolbar)findViewById(R.id.toolbar_main);
|
||||
setSupportActionBar(mainToolbar);
|
||||
getSupportActionBar().setDisplayShowTitleEnabled(false);
|
||||
|
||||
// Add the spinner to select map styles
|
||||
Spinner styleSpinner = (Spinner)findViewById(R.id.spinner_style);
|
||||
ArrayAdapter styleAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
|
||||
R.array.style_list, android.R.layout.simple_spinner_dropdown_item);
|
||||
styleSpinner.setAdapter(styleAdapter);
|
||||
styleSpinner.setOnItemSelectedListener(new StyleSpinnerListener());
|
||||
|
||||
// Add the spinner to select class styles
|
||||
mClassSpinner = (Spinner)findViewById(R.id.spinner_class);
|
||||
mOutdoorsClassAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
|
||||
R.array.outdoors_class_list, android.R.layout.simple_spinner_dropdown_item);
|
||||
mSatelliteClassAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
|
||||
R.array.satellite_class_list, android.R.layout.simple_spinner_dropdown_item);
|
||||
|
||||
// Prepare for GPS
|
||||
mLocationRequest = LocationRequest.create();
|
||||
mLocationRequest.setInterval(0);
|
||||
mLocationRequest.setSmallestDisplacement(0);
|
||||
|
||||
mLocationClient = new LocationClient(getApplicationContext(), new LocationClient.ConnectionCallbacks() {
|
||||
@Override
|
||||
public void onConnected(Bundle connectionHint) {
|
||||
updateLocation(mLocationClient.getLastLocation());
|
||||
|
||||
mLocationListener = new LocationListener() {
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
//Toast.makeText(getApplicationContext(), "Location: " + location.toString(), Toast.LENGTH_SHORT).show();
|
||||
updateLocation(location);
|
||||
}
|
||||
};
|
||||
|
||||
mLocationClient.requestLocationUpdates(mLocationRequest, mLocationListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisconnected() {
|
||||
mLocationListener = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Called when our app goes into the background
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
Log.v(TAG, "onPause");
|
||||
|
||||
// Cancel GPS
|
||||
if (mIsGpsOn) {
|
||||
mLocationClient.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
// Called when our app comes into the foreground
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
Log.v(TAG, "onResume");
|
||||
|
||||
// Restart GPS
|
||||
// Cancel any outstanding GPS
|
||||
if (mIsGpsOn) {
|
||||
mLocationClient.connect();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Other events
|
||||
//
|
||||
|
||||
// Adds items to the action bar menu
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.menu_main, menu);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
// Called when pressing action bar items
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_gps:
|
||||
// Toggle GPS position updates
|
||||
if (mIsGpsOn) {
|
||||
mIsGpsOn = false;
|
||||
item.setIcon(R.drawable.ic_action_location_searching);
|
||||
mLocationClient.disconnect();
|
||||
|
||||
} else {
|
||||
mIsGpsOn = true;
|
||||
item.setIcon(R.drawable.ic_action_location_found);
|
||||
mLocationClient.connect();
|
||||
}
|
||||
return true;
|
||||
|
||||
case R.id.action_debug:
|
||||
// Toggle debug mode
|
||||
mMapFragment.getMap().toggleDebug();
|
||||
|
||||
// Show the FPS counter
|
||||
if (mMapFragment.getMap().isDebugActive()) {
|
||||
mFpsTextView.setVisibility(View.VISIBLE);
|
||||
mFpsTextView.setText(getResources().getString(R.string.label_fps));
|
||||
} else {
|
||||
mFpsTextView.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
return true;
|
||||
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
// Handles location updates from GPS
|
||||
private void updateLocation(Location location) {
|
||||
if (location != null) {
|
||||
LonLatZoom coordinate = new LonLatZoom(location.getLongitude(), location.getLatitude(), 16);
|
||||
mMapFragment.getMap().setCenterCoordinate(coordinate, true);
|
||||
}
|
||||
}
|
||||
|
||||
// This class handles style change events
|
||||
private class StyleSpinnerListener implements AdapterView.OnItemSelectedListener {
|
||||
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
switch(position) {
|
||||
// Bright
|
||||
case 0:
|
||||
mMapFragment.getMap().setStyleUrl("asset://styles/styles/bright-v7.json");
|
||||
mMapFragment.getMap().removeAllClasses();
|
||||
mClassSpinner.setVisibility(View.INVISIBLE);
|
||||
mClassSpinner.setAdapter(null);
|
||||
mClassSpinner.setOnItemSelectedListener(null);
|
||||
break;
|
||||
|
||||
// Basic
|
||||
case 1:
|
||||
mMapFragment.getMap().setStyleUrl("asset://styles/styles/basic-v7.json");
|
||||
mMapFragment.getMap().removeAllClasses();
|
||||
mClassSpinner.setVisibility(View.INVISIBLE);
|
||||
mClassSpinner.setAdapter(null);
|
||||
mClassSpinner.setOnItemSelectedListener(null);
|
||||
break;
|
||||
|
||||
// Outdoors
|
||||
case 2:
|
||||
mMapFragment.getMap().setStyleUrl("asset://styles/styles/outdoors-v7.json");
|
||||
mMapFragment.getMap().removeAllClasses();
|
||||
mClassSpinner.setVisibility(View.VISIBLE);
|
||||
mClassSpinner.setAdapter(mOutdoorsClassAdapter);
|
||||
mClassSpinner.setOnItemSelectedListener(new OutdoorClassSpinnerListener());
|
||||
break;
|
||||
|
||||
// Satellite
|
||||
case 3:
|
||||
mMapFragment.getMap().setStyleUrl("asset://styles/styles/satellite-v7.json");
|
||||
mMapFragment.getMap().removeAllClasses();
|
||||
mClassSpinner.setVisibility(View.VISIBLE);
|
||||
mClassSpinner.setAdapter(mSatelliteClassAdapter);
|
||||
mClassSpinner.setOnItemSelectedListener(new SatelliteClassSpinnerListener());
|
||||
break;
|
||||
|
||||
// Pencil
|
||||
case 4:
|
||||
mMapFragment.getMap().setStyleUrl("asset://styles/styles/pencil-v7.json");
|
||||
mMapFragment.getMap().removeAllClasses();
|
||||
mClassSpinner.setVisibility(View.INVISIBLE);
|
||||
mClassSpinner.setAdapter(null);
|
||||
mClassSpinner.setOnItemSelectedListener(null);
|
||||
break;
|
||||
|
||||
// Empty
|
||||
case 5:
|
||||
mMapFragment.getMap().setStyleUrl("asset://styles/styles/empty-v7.json");
|
||||
mMapFragment.getMap().removeAllClasses();
|
||||
mClassSpinner.setVisibility(View.INVISIBLE);
|
||||
mClassSpinner.setAdapter(null);
|
||||
mClassSpinner.setOnItemSelectedListener(null);
|
||||
break;
|
||||
|
||||
default:
|
||||
onNothingSelected(parent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
mMapFragment.getMap().setStyleUrl("");
|
||||
}
|
||||
}
|
||||
|
||||
// This class handles outdoor class change events
|
||||
private class OutdoorClassSpinnerListener implements AdapterView.OnItemSelectedListener {
|
||||
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
ArrayList<String> classes = new ArrayList<String>(1);
|
||||
|
||||
switch(position) {
|
||||
// Day
|
||||
case 0:
|
||||
classes.add("day");
|
||||
mMapFragment.getMap().setClasses(classes);
|
||||
break;
|
||||
|
||||
// Night
|
||||
case 1:
|
||||
classes.add("night");
|
||||
mMapFragment.getMap().setClasses(classes);
|
||||
break;
|
||||
|
||||
default:
|
||||
onNothingSelected(parent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
mMapFragment.getMap().removeAllClasses();
|
||||
}
|
||||
}
|
||||
|
||||
// This class handles satellite class change events
|
||||
private class SatelliteClassSpinnerListener implements AdapterView.OnItemSelectedListener {
|
||||
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
ArrayList<String> classes = new ArrayList<String>(2);
|
||||
|
||||
switch(position) {
|
||||
// Labels + Contours
|
||||
case 0:
|
||||
classes.add("labels");
|
||||
classes.add("contours");
|
||||
mMapFragment.getMap().setClasses(classes);
|
||||
break;
|
||||
|
||||
// Labels Only
|
||||
case 1:
|
||||
classes.add("labels");
|
||||
mMapFragment.getMap().setClasses(classes);
|
||||
break;
|
||||
|
||||
// No Labels
|
||||
case 2:
|
||||
mMapFragment.getMap().setClasses(classes);
|
||||
break;
|
||||
|
||||
default:
|
||||
onNothingSelected(parent);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
mMapFragment.getMap().removeAllClasses();
|
||||
}
|
||||
}
|
||||
|
||||
// Called when FPS changes
|
||||
public class MyOnFpsChangedListener implements MapView.OnFpsChangedListener {
|
||||
|
||||
@Override
|
||||
public void onFpsChanged(double fps) {
|
||||
mFpsTextView.setText(getResources().getString(R.string.label_fps) + String.format(" %4.2f", fps));
|
||||
}
|
||||
}
|
||||
|
||||
// Called when map state changes
|
||||
public class MyOnMapChangedListener implements MapView.OnMapChangedListener {
|
||||
|
||||
@Override
|
||||
public void onMapChanged() {
|
||||
mCompassView.setRotation((float)mMapFragment.getMap().getDirection());
|
||||
}
|
||||
}
|
||||
|
||||
// Called when someone presses the compass
|
||||
public class CompassOnClickListener implements View.OnClickListener {
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
mMapFragment.getMap().resetNorth();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
package com.mapbox.mapboxgl.app;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.mapbox.mapboxgl.lib.MapView;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
public class MapFragment extends Fragment {
|
||||
|
||||
//
|
||||
// Static members
|
||||
//
|
||||
|
||||
// Tag used for logging
|
||||
private static final String TAG = "MapFragment";
|
||||
|
||||
//
|
||||
// Instance members
|
||||
//
|
||||
|
||||
// The map
|
||||
private MapView mMap;
|
||||
|
||||
//
|
||||
// Lifecycle events
|
||||
//
|
||||
|
||||
// Called when the fragment is created
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
super.onCreateView(inflater, container, savedInstanceState);
|
||||
Log.v(TAG, "onCreateView");
|
||||
|
||||
// Create the map
|
||||
mMap = (MapView) inflater.inflate(R.layout.fragment_main, container, true);
|
||||
|
||||
// Load the access token
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(getActivity().getApplicationContext().getResources().openRawResource(R.raw.token)));
|
||||
String line = reader.readLine();
|
||||
mMap.setAccessToken(line);
|
||||
} catch (IOException e) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
// Need to pass on any saved state to the map
|
||||
mMap.onCreate(savedInstanceState);
|
||||
|
||||
// Return the map as the root view
|
||||
return mMap;
|
||||
}
|
||||
|
||||
// Called when the fragment is destroyed
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
Log.v(TAG, "onDestroyView");
|
||||
|
||||
// Need to pass on to view
|
||||
mMap.onDestroy();
|
||||
mMap = null;
|
||||
}
|
||||
|
||||
// Called when the fragment is visible
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
Log.v(TAG, "onStart");
|
||||
|
||||
// Need to pass on to view
|
||||
mMap.onStart();
|
||||
}
|
||||
|
||||
// Called when the fragment is invisible
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
Log.v(TAG, "onStop");
|
||||
|
||||
// Need to pass on to view
|
||||
mMap.onStop();
|
||||
}
|
||||
|
||||
// Called when the fragment is in the background
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
Log.v(TAG, "onPause");
|
||||
|
||||
// Need to pass on to view
|
||||
mMap.onPause();
|
||||
}
|
||||
|
||||
// Called when the fragment is no longer in the background
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
Log.v(TAG, "onResume");
|
||||
|
||||
// Need to pass on to view
|
||||
mMap.onResume();
|
||||
}
|
||||
|
||||
// Called before fragment is destroyed
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
Log.v(TAG, "onSaveInstanceState");
|
||||
|
||||
// Need to retrieve any saved state from the map
|
||||
mMap.onSaveInstanceState(outState);
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
|
||||
//
|
||||
// Property methods
|
||||
//
|
||||
|
||||
public MapView getMap() {
|
||||
return mMap;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 683 B |
|
After Width: | Height: | Size: 722 B |
|
After Width: | Height: | Size: 641 B |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 465 B |
|
After Width: | Height: | Size: 484 B |
|
After Width: | Height: | Size: 482 B |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 860 B |
|
After Width: | Height: | Size: 994 B |
|
After Width: | Height: | Size: 854 B |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.v7.widget.Toolbar
|
||||
android:id="@+id/toolbar_main"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:minHeight="?attr/actionBarSize"
|
||||
android:background="?attr/colorPrimary">
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/spinner_style"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/spinner_class"
|
||||
android:visibility="invisible"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
</android.support.v7.widget.Toolbar>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<fragment
|
||||
android:name="com.mapbox.mapboxgl.app.MapFragment"
|
||||
android:id="@+id/fragment_map"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="${packageName}.${activityClass}"
|
||||
tools:layout="@layout/fragment_main" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/view_compass"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_gravity="end|top"
|
||||
android:padding="10dp"
|
||||
android:contentDescription="@string/compass_desc"
|
||||
android:src="@drawable/compass"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/view_fps"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:text="@string/label_fps"
|
||||
android:padding="10dp" />
|
||||
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.mapbox.mapboxgl.lib.MapView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item android:id="@+id/action_gps"
|
||||
android:icon="@drawable/ic_action_location_searching"
|
||||
android:title="@string/action_gps"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item android:id="@+id/action_debug"
|
||||
android:icon="@drawable/ic_action_about"
|
||||
android:title="@string/action_debug"
|
||||
app:showAsAction="ifRoom" />
|
||||
</menu>
|
||||
@@ -0,0 +1 @@
|
||||
pk.eyJ1IjoiYmxlZWdlIiwiYSI6IlhFcHdyMlEifQ.A8U0V-ob2G0RjI_gznrjtg
|
||||
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">Mapbox GL</string>
|
||||
|
||||
<string name="action_gps">Toggle GPS location</string>
|
||||
|
||||
<string name="action_debug">Toggle debug mode</string>
|
||||
|
||||
<string name="label_fps">FPS:</string>
|
||||
|
||||
<string name="compass_desc">Map compass. Click to reset the map rotation to North.</string>
|
||||
|
||||
<string-array name="style_list">
|
||||
<item>Bright</item>
|
||||
<item>Basic</item>
|
||||
<item>Outdoors</item>
|
||||
<item>Satellite</item>
|
||||
<item>Pencil</item>
|
||||
<item>Empty</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="outdoors_class_list">
|
||||
<item>Day</item>
|
||||
<item>Night</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="satellite_class_list">
|
||||
<item>Labels + Contours</item>
|
||||
<item>Labels Only</item>
|
||||
<item>No Labels</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />
|
||||
<style name="AppTheme" parent="AppBaseTheme" />
|
||||
</resources>
|
||||