前回はSkobblerを使うための準備をしました。
今回はソースコードを書いて地図が表示するまでを書きます。
-
assetsの中に保存した「SKMaps.zip」はローカルフォルダに解答する必要があります。下記のコードをMySkobblerのActivityに追記します。
new SKPrepareMapTextureThread(this, mapResDirPath, "SKMaps.zip", this).start();
ここで各引数は下記のとおりです。
-
android.content.Context
- コピー先のパス
- コピーするzip
- コピーの成否を通知する「com.skobbler.ngx.SKPrepareMapTextureListener」
-
SkobblerのAPI-KEYをアカウント情報から取得する。
-
下記のmeta情報をAndroidManifest.xmlのタグの下に追加します。
<meta-data android:name="com.skobbler.ngx.API_KEY" android:value="ここを自分のAPI-KEYに書き換える"/>
-
ライブラリを初期化します。
設定内容の説明は省略しますが、地図のスタイルやナビゲーションの音声言語等を設定します。
SKMapsInitSettings initMapSettings = new SKMapsInitSettings();
initMapSettings.setMapResourcesPaths(mapResourcesDirPath,
new SKMapViewStyle(mapResourcesDirPath + "daystyle/", "daystyle.json"));
final SKAdvisorSettings advisorSettings = initMapSettings.getAdvisorSettings();
advisorSettings.setAdvisorConfigPath(mapResourcesDirPath + "Advisor");
advisorSettings.setResourcePath(mapResourcesDirPath + "Advisor/Languages");
advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_EN);
advisorSettings.setAdvisorVoice("en");
initMapSettings.setAdvisorSettings(advisorSettings);
SKMaps.getInstance().initializeSKMaps(this, initMapSettings);
-
地図を表示します。
地図を表示するときはSKMapFragmentを使います、このクラスは通常のFragmentと同様に扱い画面に組み込むことができます。
また、SKMapFragment#setMapSurfaceListenerで地図に関するイベントの通知を受けとることができます。このリスナーについては次回説明します。
SKMapFragment mapFragment = new SKMapFragment();
mapFragment.setMapSurfaceListener(this);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.container, mapFragment).commit();
[/code]
ここまでで地図を表示できるようになっています。
次回はSKMapSurfaceListenerの各種メソッドについて説明します。
ここまでのActivityのソースコードを記載します。
public class MainActivity extends AppCompatActivity implements SKPrepareMapTextureListener ,SKMapSurfaceListener {
private SKMapSurfaceView mapView;
String mapResourcesDirPath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapResourcesDirPath = getFilesDir().getPath() + "/" + "SKMaps/";
if (!new File(mapResourcesDirPath).exists()) {
new SKPrepareMapTextureThread(this, mapResourcesDirPath, "SKMaps.zip", this).start();
}else {
initMapSetting();
}
}
@Override
public void onMapTexturesPrepared(boolean b) {
if(b){
initMapSetting();
}
}
private void initMapSetting() {
SKMapsInitSettings initMapSettings = new SKMapsInitSettings();
initMapSettings.setMapResourcesPaths(mapResourcesDirPath,
new SKMapViewStyle(mapResourcesDirPath + "daystyle/", "daystyle.json"));
final SKAdvisorSettings advisorSettings = initMapSettings.getAdvisorSettings();
advisorSettings.setAdvisorConfigPath(mapResourcesDirPath + "Advisor");
advisorSettings.setResourcePath(mapResourcesDirPath + "Advisor/Languages");
advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_EN);
advisorSettings.setAdvisorVoice("en");
initMapSettings.setAdvisorSettings(advisorSettings);
SKMaps.getInstance().initializeSKMaps(this, initMapSettings);
SKMapFragment mapFragment = new SKMapFragment();
mapFragment.setMapSurfaceListener(this);
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.container, mapFragment).commit();
}
@Override
protected void onPause() {
super.onPause();
if(mapView != null){
mapView.onPause();
}
}
@Override
protected void onResume() {
super.onResume();
if(mapView != null){
mapView.onResume();
}
}
@Override
public void onSurfaceCreated(SKMapViewHolder skMapViewHolder) {
mapView = skMapViewHolder.getMapSurfaceView();
}
@Override
public void onActionPan() {}
@Override
public void onActionZoom() {}
@Override
public void onMapRegionChanged(SKCoordinateRegion skCoordinateRegion) {}
@Override
public void onMapRegionChangeStarted(SKCoordinateRegion skCoordinateRegion) {}
@Override
public void onMapRegionChangeEnded(SKCoordinateRegion skCoordinateRegion) {}
@Override
public void onDoubleTap(SKScreenPoint skScreenPoint) {}
@Override
public void onSingleTap(SKScreenPoint skScreenPoint) {}
@Override
public void onRotateMap() {}
@Override
public void onLongPress(SKScreenPoint skScreenPoint) {}
@Override
public void onInternetConnectionNeeded() {}
@Override
public void onMapActionDown(SKScreenPoint skScreenPoint) {}
@Override
public void onMapActionUp(SKScreenPoint skScreenPoint) {}
@Override
public void onPOIClusterSelected(SKPOICluster skpoiCluster) {}
@Override
public void onMapPOISelected(SKMapPOI skMapPOI) {}
@Override
public void onAnnotationSelected(SKAnnotation skAnnotation) {}
@Override
public void onCustomPOISelected(SKMapCustomPOI skMapCustomPOI) {}
@Override
public void onCompassSelected() {}
@Override
public void onCurrentPositionSelected() {}
@Override
public void onObjectSelected(int i) {}
@Override
public void onInternationalisationCalled(int i) {}
@Override
public void onBoundingBoxImageRendered(int i) {}
@Override
public void onGLInitializationError(String s) {}
@Override
public void onScreenshotReady(Bitmap bitmap) {}
}