[android] - allow multiple listeners for camera events, deprecate old api

This commit is contained in:
Tobrun Van Nuland
2017-10-06 13:47:01 +02:00
committed by Tobrun
parent 2a9752d11c
commit 94312acd8b
4 changed files with 366 additions and 85 deletions

View File

@@ -1,6 +1,5 @@
package com.mapbox.mapboxsdk.testapp.activity.camera;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -28,11 +27,13 @@ import timber.log.Timber;
/**
* Test activity showcasing how to listen to camera change events.
*/
public class CameraPositionActivity extends AppCompatActivity implements OnMapReadyCallback {
public class CameraPositionActivity extends AppCompatActivity implements OnMapReadyCallback, View.OnClickListener,
MapboxMap.OnMapLongClickListener {
private MapView mapView;
private MapboxMap mapboxMap;
private FloatingActionButton fab;
private boolean logCameraChanges;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -47,96 +48,49 @@ public class CameraPositionActivity extends AppCompatActivity implements OnMapRe
@Override
public void onMapReady(@NonNull final MapboxMap map) {
mapboxMap = map;
mapboxMap.setOnCameraIdleListener(new MapboxMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
Timber.e("OnCameraIdle");
fab.setColorFilter(ContextCompat.getColor(CameraPositionActivity.this, android.R.color.holo_green_dark));
}
});
mapboxMap.setOnCameraMoveCancelListener(new MapboxMap.OnCameraMoveCanceledListener() {
@Override
public void onCameraMoveCanceled() {
Timber.e("OnCameraMoveCanceled");
}
});
mapboxMap.setOnCameraMoveListener(new MapboxMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
Timber.e("OnCameraMove");
fab.setColorFilter(ContextCompat.getColor(CameraPositionActivity.this, android.R.color.holo_orange_dark));
}
});
mapboxMap.setOnCameraMoveStartedListener(new MapboxMap.OnCameraMoveStartedListener() {
private final String[] REASONS = {"REASON_API_GESTURE", "REASON_DEVELOPER_ANIMATION", "REASON_API_ANIMATION"};
@Override
public void onCameraMoveStarted(int reason) {
// reason ranges from 1 <-> 3
fab.setColorFilter(ContextCompat.getColor(CameraPositionActivity.this, android.R.color.holo_red_dark));
Timber.e("OnCameraMoveStarted: %s", REASONS[reason - 1]);
}
});
toggleLogCameraChanges();
// add a listener to FAB
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setColorFilter(ContextCompat.getColor(CameraPositionActivity.this, R.color.primary));
fab.setOnClickListener(new View.OnClickListener() {
@SuppressLint("InflateParams")
@Override
public void onClick(View view) {
Context context = view.getContext();
final View dialogContent = LayoutInflater.from(context).inflate(R.layout.dialog_camera_position, null);
AlertDialog.Builder builder = new AlertDialog.Builder(
context, com.mapbox.mapboxsdk.R.style.mapbox_AlertDialogStyle);
builder.setTitle(R.string.dialog_camera_position);
builder.setView(onInflateDialogContent(dialogContent));
builder.setPositiveButton("Animate", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
double latitude = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_lat)).getText().toString());
double longitude = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_lon)).getText().toString());
double zoom = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_zoom)).getText().toString());
double bearing = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_bearing)).getText().toString());
double tilt = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_tilt)).getText().toString());
fab.setOnClickListener(this);
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude))
.zoom(zoom)
.bearing(bearing)
.tilt(tilt)
.build();
// listen to long click events to toggle logging camera changes
mapboxMap.setOnMapLongClickListener(this);
}
mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition), 5000,
new MapboxMap.CancelableCallback() {
@Override
public void onCancel() {
Timber.v("OnCancel called");
}
@Override
public void onMapLongClick(@NonNull LatLng point) {
toggleLogCameraChanges();
}
@Override
public void onFinish() {
Timber.v("OnFinish called");
}
});
Timber.v(cameraPosition.toString());
}
});
builder.setNegativeButton("Cancel", null);
builder.setCancelable(false);
builder.show();
}
});
@Override
public void onClick(View view) {
Context context = view.getContext();
final View dialogContent = LayoutInflater.from(context).inflate(R.layout.dialog_camera_position, null);
AlertDialog.Builder builder = new AlertDialog.Builder(
context, com.mapbox.mapboxsdk.R.style.mapbox_AlertDialogStyle);
builder.setTitle(R.string.dialog_camera_position);
builder.setView(onInflateDialogContent(dialogContent));
builder.setPositiveButton("Animate", new DialogClickListener(mapboxMap, dialogContent));
builder.setNegativeButton("Cancel", null);
builder.setCancelable(false);
builder.show();
}
private void toggleLogCameraChanges() {
logCameraChanges = !logCameraChanges;
if (logCameraChanges) {
mapboxMap.addOnCameraIdleListener(idleListener);
mapboxMap.addOnCameraMoveCancelListener(moveCanceledListener);
mapboxMap.addOnCameraMoveListener(moveListener);
mapboxMap.addOnCameraMoveStartedListener(moveStartedListener);
} else {
mapboxMap.removeOnCameraIdleListener(idleListener);
mapboxMap.removeOnCameraMoveCancelListener(moveCanceledListener);
mapboxMap.removeOnCameraMoveListener(moveListener);
mapboxMap.removeOnCameraMoveStartedListener(moveStartedListener);
}
}
@Override
@@ -193,6 +147,42 @@ public class CameraPositionActivity extends AppCompatActivity implements OnMapRe
seekBar.setProgress(defaultValue);
}
private MapboxMap.OnCameraIdleListener idleListener = new MapboxMap.OnCameraIdleListener() {
@Override
public void onCameraIdle() {
Timber.e("OnCameraIdle");
fab.setColorFilter(ContextCompat.getColor(CameraPositionActivity.this, android.R.color.holo_green_dark));
}
};
private MapboxMap.OnCameraMoveListener moveListener = new MapboxMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
Timber.e("OnCameraMove");
fab.setColorFilter(ContextCompat.getColor(CameraPositionActivity.this, android.R.color.holo_orange_dark));
}
};
private MapboxMap.OnCameraMoveCanceledListener moveCanceledListener = new MapboxMap.OnCameraMoveCanceledListener() {
@Override
public void onCameraMoveCanceled() {
Timber.e("OnCameraMoveCanceled");
}
};
private MapboxMap.OnCameraMoveStartedListener moveStartedListener = new MapboxMap.OnCameraMoveStartedListener() {
private final String[] REASONS = {"REASON_API_GESTURE", "REASON_DEVELOPER_ANIMATION", "REASON_API_ANIMATION"};
@Override
public void onCameraMoveStarted(int reason) {
// reason ranges from 1 <-> 3
fab.setColorFilter(ContextCompat.getColor(CameraPositionActivity.this, android.R.color.holo_red_dark));
Timber.e("OnCameraMoveStarted: %s", REASONS[reason - 1]);
}
};
private class ValueChangeListener implements SeekBar.OnSeekBarChangeListener {
protected TextView textView;
@@ -224,4 +214,50 @@ public class CameraPositionActivity extends AppCompatActivity implements OnMapRe
super.onProgressChanged(seekBar, progress - 180, fromUser);
}
}
private static class DialogClickListener implements DialogInterface.OnClickListener {
private MapboxMap mapboxMap;
private View dialogContent;
public DialogClickListener(MapboxMap mapboxMap, View view) {
this.mapboxMap = mapboxMap;
this.dialogContent = view;
}
@Override
public void onClick(DialogInterface dialog, int which) {
double latitude = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_lat)).getText().toString());
double longitude = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_lon)).getText().toString());
double zoom = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_zoom)).getText().toString());
double bearing = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_bearing)).getText().toString());
double tilt = Double.parseDouble(
((TextView) dialogContent.findViewById(R.id.value_tilt)).getText().toString());
CameraPosition cameraPosition = new CameraPosition.Builder()
.target(new LatLng(latitude, longitude))
.zoom(zoom)
.bearing(bearing)
.tilt(tilt)
.build();
mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition), 5000,
new MapboxMap.CancelableCallback() {
@Override
public void onCancel() {
Timber.v("OnCancel called");
}
@Override
public void onFinish() {
Timber.v("OnFinish called");
}
});
Timber.v(cameraPosition.toString());
}
}
}