Added info icon and map box logo

This commit is contained in:
tobrunvannuland
2015-09-01 08:36:53 +02:00
committed by Justin R. Miller
parent d57b47b1eb
commit 7341ada02e
11 changed files with 215 additions and 4 deletions

View File

@@ -1,17 +1,23 @@
package com.mapbox.mapboxgl.views;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.RectF;
import android.graphics.SurfaceTexture;
import android.graphics.drawable.Drawable;
import android.hardware.GeomagneticField;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
@@ -20,10 +26,12 @@ import android.hardware.SensorManager;
import android.location.Location;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v4.view.ScaleGestureDetectorCompat;
import android.text.TextUtils;
@@ -38,6 +46,8 @@ import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ZoomButtonsController;
@@ -95,6 +105,10 @@ public class MapView extends FrameLayout implements LocationListener {
private static final String STATE_MY_LOCATION_ENABLED = "myLocationEnabled";
private static final String STATE_USER_LOCATION_TRACKING_MODE = "userLocationTrackingMode";
// Used for positioning views
private static final float DIMENSION_SIXTEEN_DP = 16f;
private static final float DIMENSION_TEN_DP = 10f;
/**
* Every annotation that has been added to the map.
*/
@@ -156,6 +170,12 @@ public class MapView extends FrameLayout implements LocationListener {
private float mCompassBearing;
private boolean mCompassValid = false;
// Used for MapboxLogo
private ImageView mLogoView;
// Used for attributions control
private ImageView mAttributionsView;
// Used for map toggle mode
private long t0 = new Date().getTime();
@@ -306,6 +326,8 @@ public class MapView extends FrameLayout implements LocationListener {
// Get the screen's density
mScreenDensity = context.getResources().getDisplayMetrics().density;
int tenDp = (int)(10 * mScreenDensity);
int sixteenDp = (int)(16 * mScreenDensity);
// Get the cache path
String cachePath = context.getCacheDir().getAbsolutePath();
@@ -373,13 +395,30 @@ public class MapView extends FrameLayout implements LocationListener {
mCompassView.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.compass));
mCompassView.setContentDescription(getResources().getString(R.string.compassContentDescription));
LayoutParams lp = new FrameLayout.LayoutParams((int)(48 * mScreenDensity), (int)(48 * mScreenDensity));
lp.gravity = Gravity.TOP | Gravity.END;
int tenDp = (int)(10 * mScreenDensity);
lp.setMargins(tenDp, tenDp, tenDp, tenDp);
mCompassView.setLayoutParams(lp);
addView(mCompassView);
mCompassView.setOnClickListener(new CompassOnClickListener());
// Setup Mapbox logo
mLogoView = new ImageView(mContext);
mLogoView.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.ic_logo_mapbox));
mLogoView.setContentDescription(getResources().getString(R.string.mapboxIconContentDescription));
LayoutParams logoParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mLogoView.setLayoutParams(logoParams);
addView(mLogoView);
// Setup Attributions control
mAttributionsView = new ImageView(mContext);
Drawable attrDrawable = ContextCompat.getDrawable(mContext, R.drawable.ic_info_outline_black_24dp);
attrDrawable = DrawableCompat.wrap(attrDrawable);
DrawableCompat.setTintList(attrDrawable, getResources().getColorStateList(R.color.material_bg_selector, mContext.getTheme()));
mAttributionsView.setImageDrawable(attrDrawable);
mAttributionsView.setContentDescription(getResources().getString(R.string.attributionsIconContentDescription));
LayoutParams attrParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mAttributionsView.setLayoutParams(attrParams);
addView(mAttributionsView);
mAttributionsView.setOnClickListener(new AttributionOnClickListener());
// Setup Support For Listener Tracking
// MapView's internal listener is setup in onCreate()
mOnMapChangedListener = new ArrayList<>();
@@ -412,7 +451,29 @@ public class MapView extends FrameLayout implements LocationListener {
}
setStyleClasses(styleClasses);
}
// Compass
setCompassEnabled(typedArray.getBoolean(R.styleable.MapView_compassEnabled, true));
setCompassGravity(typedArray.getInt(R.styleable.MapView_compassGravity, Gravity.TOP | Gravity.END));
setWidgetMargins(mCompassView, typedArray.getDimension(R.styleable.MapView_compassMarginLeft, DIMENSION_TEN_DP)
, typedArray.getDimension(R.styleable.MapView_compassMarginTop, DIMENSION_TEN_DP)
, typedArray.getDimension(R.styleable.MapView_compassMarginRight, DIMENSION_TEN_DP)
, typedArray.getDimension(R.styleable.MapView_compassMarginBottom, DIMENSION_TEN_DP));
// Logo
setLogoGravity(typedArray.getInt(R.styleable.MapView_logoGravity, Gravity.BOTTOM | Gravity.START));
setWidgetMargins(mLogoView, typedArray.getDimension(R.styleable.MapView_logoMarginLeft, DIMENSION_SIXTEEN_DP)
, typedArray.getDimension(R.styleable.MapView_logoMarginTop, DIMENSION_SIXTEEN_DP)
, typedArray.getDimension(R.styleable.MapView_logoMarginRight, DIMENSION_SIXTEEN_DP)
, typedArray.getDimension(R.styleable.MapView_logoMarginBottom, DIMENSION_SIXTEEN_DP));
// Attribution
setAttributionGravity(typedArray.getInt(R.styleable.MapView_attributionGravity, Gravity.BOTTOM | Gravity.END));
setWidgetMargins(mAttributionsView, typedArray.getDimension(R.styleable.MapView_attributionMarginLeft, DIMENSION_SIXTEEN_DP)
, typedArray.getDimension(R.styleable.MapView_attributionMarginTop, DIMENSION_SIXTEEN_DP)
, typedArray.getDimension(R.styleable.MapView_attributionMarginRight, DIMENSION_SIXTEEN_DP)
, typedArray.getDimension(R.styleable.MapView_attributionMarginBottom, DIMENSION_SIXTEEN_DP));
setMyLocationEnabled(typedArray.getBoolean(R.styleable.MapView_myLocationEnabled, false));
} finally {
typedArray.recycle();
@@ -1835,6 +1896,48 @@ public class MapView extends FrameLayout implements LocationListener {
updateMap(MapChange.MapChangeNullChange);
}
public void setCompassGravity(int gravity){
setWidgetGravity(mCompassView, gravity);
}
public void setCompassMargins(int left, int top, int right, int bottom){
setWidgetMargins(mCompassView, left, top, right, bottom);
}
public void setLogoGravity(int gravity){
setWidgetGravity(mLogoView, gravity);
}
public void setLogoMargins(int left, int top, int right, int bottom){
setWidgetMargins(mLogoView, left, top, right, bottom);
}
public void setAttributionGravity(int gravity){
setWidgetGravity(mAttributionsView, gravity);
}
public void setAttributionMargins(int left, int top, int right, int bottom) {
setWidgetMargins(mAttributionsView, left, top, right, bottom);
}
private void setWidgetGravity(@NonNull final View view, int gravity){
LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
layoutParams.gravity = gravity;
view.setLayoutParams(layoutParams);
}
private void setWidgetMargins(@NonNull final View view, int left, int top, int right, int bottom){
LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
layoutParams.setMargins(left,top,right,bottom);
view.setLayoutParams(layoutParams);
}
private void setWidgetMargins(@NonNull final View view, float leftDp, float topDp, float rightDp, float bottomDp){
LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
layoutParams.setMargins((int)(leftDp*mScreenDensity),(int)(topDp*mScreenDensity),(int)(rightDp*mScreenDensity),(int)(bottomDp*mScreenDensity));
view.setLayoutParams(layoutParams);
}
// This class handles sensor updates to calculate compass bearing
private class CompassListener implements SensorEventListener {
@@ -1889,6 +1992,30 @@ public class MapView extends FrameLayout implements LocationListener {
}
private static class AttributionOnClickListener implements View.OnClickListener, DialogInterface.OnClickListener {
// Called when someone presses the attribution icon
@Override
public void onClick(View v) {
Context context = v.getContext();
String[] items = context.getResources().getStringArray(R.array.attribution_names);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.attributionsDialogTitle);
builder.setAdapter(new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, items), this);
builder.show();
}
// Called when someone selects an attribution
@Override
public void onClick(DialogInterface dialog, int which) {
Context context = ((Dialog)dialog).getContext();
String[]links = context.getResources().getStringArray(R.array.attribution_links);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(links[which]));
context.startActivity(intent);
}
}
/**
* LOST's LocationListener Callback
* @param location New Location

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="?attr/colorPrimaryDark"
android:state_pressed="true"/>
<item
android:color="?attr/colorPrimary" />
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 487 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 940 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="attribution_names">
<item>&#169; Mapbox</item>
<item>&#169; OpenStreetMap</item>
<item>Improve this map</item>
</array>
<array name="attribution_links" formatted="false" translatable="false">
<item>https://www.mapbox.com/about/maps/</item>
<item>http://www.openstreetmap.org/about/</item>
<item>https://www.mapbox.com/map-feedback</item>
</array>
</resources>

View File

@@ -11,7 +11,67 @@
<attr name="styleUrl" format="string" />
<attr name="accessToken" format="string"/>
<attr name="styleClasses" format="string"/>
<attr name="compassEnabled" format="boolean" />
<attr name="myLocationEnabled" format="boolean" />
<attr name="compassEnabled" format="boolean" />
<attr name="compassGravity">
<flag name="top" value="0x30" />
<flag name="bottom" value="0x50" />
<flag name="left" value="0x03" />
<flag name="right" value="0x05" />
<flag name="center_vertical" value="0x10" />
<flag name="fill_vertical" value="0x70" />
<flag name="center_horizontal" value="0x01" />
<flag name="fill_horizontal" value="0x07" />
<flag name="center" value="0x11" />
<flag name="fill" value="0x77" />
<flag name="clip_vertical" value="0x80" />
<flag name="clip_horizontal" value="0x08" />
<flag name="start" value="0x00800003" />
<flag name="end" value="0x00800005" />
</attr>
<attr name="compassMarginLeft" format="dimension"/>
<attr name="compassMarginTop" format="dimension"/>
<attr name="compassMarginRight" format="dimension"/>
<attr name="compassMarginBottom" format="dimension"/>
<attr name="logoGravity">
<flag name="top" value="0x30" />
<flag name="bottom" value="0x50" />
<flag name="left" value="0x03" />
<flag name="right" value="0x05" />
<flag name="center_vertical" value="0x10" />
<flag name="fill_vertical" value="0x70" />
<flag name="center_horizontal" value="0x01" />
<flag name="fill_horizontal" value="0x07" />
<flag name="center" value="0x11" />
<flag name="fill" value="0x77" />
<flag name="clip_vertical" value="0x80" />
<flag name="clip_horizontal" value="0x08" />
<flag name="start" value="0x00800003" />
<flag name="end" value="0x00800005" />
</attr>
<attr name="logoMarginLeft" format="dimension"/>
<attr name="logoMarginTop" format="dimension"/>
<attr name="logoMarginRight" format="dimension"/>
<attr name="logoMarginBottom" format="dimension"/>
<attr name="attributionGravity">
<flag name="top" value="0x30" />
<flag name="bottom" value="0x50" />
<flag name="left" value="0x03" />
<flag name="right" value="0x05" />
<flag name="center_vertical" value="0x10" />
<flag name="fill_vertical" value="0x70" />
<flag name="center_horizontal" value="0x01" />
<flag name="fill_horizontal" value="0x07" />
<flag name="center" value="0x11" />
<flag name="fill" value="0x77" />
<flag name="clip_vertical" value="0x80" />
<flag name="clip_horizontal" value="0x08" />
<flag name="start" value="0x00800003" />
<flag name="end" value="0x00800005" />
</attr>
<attr name="attributionMarginLeft" format="dimension"/>
<attr name="attributionMarginTop" format="dimension"/>
<attr name="attributionMarginRight" format="dimension"/>
<attr name="attributionMarginBottom" format="dimension"/>
</declare-styleable>
</resources>

View File

@@ -4,4 +4,7 @@
<string name="infoWindowTitle">Title</string>
<string name="infoWindowDescription">Description</string>
<string name="infoWindowAddress">Address</string>
<string name="attributionsIconContentDescription">Attribution icon. Click to show attribution dialog.</string>
<string name="attributionsDialogTitle">Mapbox for Android</string>
<string name="mapboxIconContentDescription">Mapbox logo.</string>
</resources>