use OverlayMarker instead of Drawable
This commit is contained in:
parent
6232c401db
commit
0bc986607d
@ -17,14 +17,11 @@ package org.oscim.layers.overlay;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.oscim.app.R;
|
|
||||||
import org.oscim.core.BoundingBox;
|
import org.oscim.core.BoundingBox;
|
||||||
import org.oscim.core.PointF;
|
import org.oscim.core.PointF;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
import org.oscim.view.MapViewPosition;
|
import org.oscim.view.MapViewPosition;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
public class ItemizedIconOverlay<Item extends OverlayItem> extends ItemizedOverlay<Item> {
|
public class ItemizedIconOverlay<Item extends OverlayItem> extends ItemizedOverlay<Item> {
|
||||||
@ -36,28 +33,16 @@ public class ItemizedIconOverlay<Item extends OverlayItem> extends ItemizedOverl
|
|||||||
|
|
||||||
private final PointF mItemPoint = new PointF();
|
private final PointF mItemPoint = new PointF();
|
||||||
|
|
||||||
public ItemizedIconOverlay(
|
public ItemizedIconOverlay(MapView mapView, List<Item> list, OverlayMarker defaultMarker,
|
||||||
final MapView mapView,
|
ItemizedIconOverlay.OnItemGestureListener<Item> onItemGestureListener) {
|
||||||
final List<Item> pList,
|
|
||||||
final Drawable pDefaultMarker,
|
|
||||||
final ItemizedIconOverlay.OnItemGestureListener<Item> pOnItemGestureListener) {
|
|
||||||
|
|
||||||
super(mapView, pDefaultMarker);
|
super(mapView, defaultMarker);
|
||||||
|
|
||||||
this.mItemList = pList;
|
this.mItemList = list;
|
||||||
this.mOnItemGestureListener = pOnItemGestureListener;
|
this.mOnItemGestureListener = onItemGestureListener;
|
||||||
populate();
|
populate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemizedIconOverlay(
|
|
||||||
final MapView mapView,
|
|
||||||
final Context pContext,
|
|
||||||
final List<Item> pList,
|
|
||||||
final ItemizedIconOverlay.OnItemGestureListener<Item> pOnItemGestureListener) {
|
|
||||||
this(mapView, pList, pContext.getResources().getDrawable(R.drawable.marker_default),
|
|
||||||
pOnItemGestureListener);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onSnapToItem(final int pX, final int pY, final PointF pSnapPoint) {
|
public boolean onSnapToItem(final int pX, final int pY, final PointF pSnapPoint) {
|
||||||
// TODO Implement this!
|
// TODO Implement this!
|
||||||
@ -139,6 +124,7 @@ public class ItemizedIconOverlay<Item extends OverlayItem> extends ItemizedOverl
|
|||||||
return onSingleTapUpHelper(index, that.mItemList.get(index));
|
return onSingleTapUpHelper(index, that.mItemList.get(index));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onLongPress(final MotionEvent event) {
|
public boolean onLongPress(final MotionEvent event) {
|
||||||
return activateSelectedItems(event, mActiveItemLongPress) || super.onLongPress(event);
|
return activateSelectedItems(event, mActiveItemLongPress) || super.onLongPress(event);
|
||||||
@ -186,7 +172,7 @@ public class ItemizedIconOverlay<Item extends OverlayItem> extends ItemizedOverl
|
|||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
Item item = getItem(i);
|
Item item = getItem(i);
|
||||||
if (!bbox.contains(item.mGeoPoint)){
|
if (!bbox.contains(item.mGeoPoint)) {
|
||||||
//Log.d(TAG, "skip: " + item.getTitle());
|
//Log.d(TAG, "skip: " + item.getTitle());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,8 @@ package org.oscim.layers.overlay;
|
|||||||
// - and to make this work for multiple overlays
|
// - and to make this work for multiple overlays
|
||||||
// a global scenegraph is probably required.
|
// a global scenegraph is probably required.
|
||||||
|
|
||||||
|
import org.oscim.android.AndroidGraphics;
|
||||||
|
import org.oscim.app.R;
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
import org.oscim.core.MercatorProjection;
|
import org.oscim.core.MercatorProjection;
|
||||||
import org.oscim.core.PointD;
|
import org.oscim.core.PointD;
|
||||||
@ -28,11 +30,11 @@ import org.oscim.core.Tile;
|
|||||||
import org.oscim.layers.overlay.OverlayItem.HotspotPlace;
|
import org.oscim.layers.overlay.OverlayItem.HotspotPlace;
|
||||||
import org.oscim.renderer.GLRenderer.Matrices;
|
import org.oscim.renderer.GLRenderer.Matrices;
|
||||||
import org.oscim.renderer.layers.BasicRenderLayer;
|
import org.oscim.renderer.layers.BasicRenderLayer;
|
||||||
|
import org.oscim.renderer.sublayers.SymbolItem;
|
||||||
import org.oscim.renderer.sublayers.SymbolLayer;
|
import org.oscim.renderer.sublayers.SymbolLayer;
|
||||||
import org.oscim.utils.GeometryUtils;
|
import org.oscim.utils.GeometryUtils;
|
||||||
import org.oscim.view.MapView;
|
import org.oscim.view.MapView;
|
||||||
|
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
|
||||||
@ -56,7 +58,7 @@ public abstract class ItemizedOverlay<Item extends OverlayItem> extends Overlay
|
|||||||
|
|
||||||
//private final static String TAG = ItemizedOverlay.class.getName();
|
//private final static String TAG = ItemizedOverlay.class.getName();
|
||||||
|
|
||||||
protected final Drawable mDefaultMarker;
|
protected final OverlayMarker mDefaultMarker;
|
||||||
protected boolean mDrawFocusedItem = true;
|
protected boolean mDrawFocusedItem = true;
|
||||||
|
|
||||||
class InternalItem {
|
class InternalItem {
|
||||||
@ -161,7 +163,8 @@ public abstract class ItemizedOverlay<Item extends OverlayItem> extends Overlay
|
|||||||
if (mDrawFocusedItem && (mFocusedItem == it.item))
|
if (mDrawFocusedItem && (mFocusedItem == it.item))
|
||||||
state = OverlayItem.ITEM_STATE_FOCUSED_MASK;
|
state = OverlayItem.ITEM_STATE_FOCUSED_MASK;
|
||||||
|
|
||||||
Drawable marker = it.item.getDrawable();
|
//Drawable marker = it.item.getDrawable();
|
||||||
|
OverlayMarker marker = it.item.getMarker(0);
|
||||||
if (marker == null)
|
if (marker == null)
|
||||||
marker = mDefaultMarker;
|
marker = mDefaultMarker;
|
||||||
|
|
||||||
@ -171,7 +174,17 @@ public abstract class ItemizedOverlay<Item extends OverlayItem> extends Overlay
|
|||||||
// } else
|
// } else
|
||||||
// marker = item.getMarker(state);
|
// marker = item.getMarker(state);
|
||||||
|
|
||||||
mSymbolLayer.addDrawable(marker, state, it.x, it.y);
|
//mSymbolLayer.addDrawable(marker, state, it.x, it.y);
|
||||||
|
|
||||||
|
SymbolItem s = SymbolItem.pool.get();
|
||||||
|
s.bitmap = marker.getBitmap();
|
||||||
|
|
||||||
|
s.x = it.x;
|
||||||
|
s.y = it.y;
|
||||||
|
s.offset = marker.getHotspot();
|
||||||
|
s.billboard = true;
|
||||||
|
|
||||||
|
mSymbolLayer.addSymbol(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -179,6 +192,10 @@ public abstract class ItemizedOverlay<Item extends OverlayItem> extends Overlay
|
|||||||
layers.textureLayers = mSymbolLayer;
|
layers.textureLayers = mSymbolLayer;
|
||||||
newData = true;
|
newData = true;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public synchronized void compile() {
|
||||||
|
super.compile();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -198,14 +215,17 @@ public abstract class ItemizedOverlay<Item extends OverlayItem> extends Overlay
|
|||||||
*/
|
*/
|
||||||
public abstract int size();
|
public abstract int size();
|
||||||
|
|
||||||
public ItemizedOverlay(MapView mapView, final Drawable pDefaultMarker) {
|
public ItemizedOverlay(MapView mapView, OverlayMarker defaultMarker) {
|
||||||
super(mapView);
|
super(mapView);
|
||||||
|
|
||||||
if (pDefaultMarker == null) {
|
if (defaultMarker == null) {
|
||||||
throw new IllegalArgumentException("You must pass a default marker to ItemizedOverlay.");
|
defaultMarker = AndroidGraphics.makeMarker(mapView.getContext().getResources()
|
||||||
|
.getDrawable(R.drawable.marker_default), null);
|
||||||
|
//throw new IllegalArgumentException("You must pass a default marker to ItemizedOverlay.");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.mDefaultMarker = pDefaultMarker;
|
//this.mDefaultMarker = OverlayMarker.makeMarker(pDefaultMarker, null);
|
||||||
|
mDefaultMarker = defaultMarker;
|
||||||
mLayer = new ItemOverlay(mapView);
|
mLayer = new ItemOverlay(mapView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,14 +290,8 @@ public abstract class ItemizedOverlay<Item extends OverlayItem> extends Overlay
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// return mInternalItemList.get(position);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// private Drawable getDefaultMarker(final int state) {
|
|
||||||
// OverlayItem.setState(mDefaultMarker, state);
|
|
||||||
// return mDefaultMarker;
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See if a given hit point is within the bounds of an item's marker.
|
* See if a given hit point is within the bounds of an item's marker.
|
||||||
* Override to modify the way an item is hit tested. The hit point is
|
* Override to modify the way an item is hit tested. The hit point is
|
||||||
@ -393,91 +407,4 @@ public abstract class ItemizedOverlay<Item extends OverlayItem> extends Overlay
|
|||||||
return marker;
|
return marker;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Drawable makeMarker(Resources res, int id, HotspotPlace place) {
|
|
||||||
Drawable marker = res.getDrawable(id);
|
|
||||||
if (place == null)
|
|
||||||
boundToHotspot(marker, HotspotPlace.CENTER);
|
|
||||||
else
|
|
||||||
boundToHotspot(marker, place);
|
|
||||||
return marker;
|
|
||||||
}
|
|
||||||
// /**
|
|
||||||
// * Draw a marker on each of our items. populate() must have been called
|
|
||||||
// * first.<br/>
|
|
||||||
// * <br/>
|
|
||||||
// * The marker will be drawn twice for each Item in the Overlay--once in the
|
|
||||||
// * shadow phase, skewed and darkened, then again in the non-shadow phase.
|
|
||||||
// * The bottom-center of the marker will be aligned with the geographical
|
|
||||||
// * coordinates of the Item.<br/>
|
|
||||||
// * <br/>
|
|
||||||
// * The order of drawing may be changed by overriding the getIndexToDraw(int)
|
|
||||||
// * method. An item may provide an alternate marker via its
|
|
||||||
// * OverlayItem.getMarker(int) method. If that method returns null, the
|
|
||||||
// * default marker is used.<br/>
|
|
||||||
// * <br/>
|
|
||||||
// * The focused item is always drawn last, which puts it visually on top of
|
|
||||||
// * the other items.<br/>
|
|
||||||
// *
|
|
||||||
// * @param canvas
|
|
||||||
// * the Canvas upon which to draw. Note that this may already have
|
|
||||||
// * a transformation applied, so be sure to leave it the way you
|
|
||||||
// * found it
|
|
||||||
// * @param mapView
|
|
||||||
// * the MapView that requested the draw. Use
|
|
||||||
// * MapView.getProjection() to convert between on-screen pixels
|
|
||||||
// * and latitude/longitude pairs
|
|
||||||
// * @param shadow
|
|
||||||
// * if true, draw the shadow layer. If false, draw the overlay
|
|
||||||
// * contents.
|
|
||||||
// */
|
|
||||||
// @Override
|
|
||||||
// public void draw(final Canvas canvas, final MapView mapView, final boolean shadow) {
|
|
||||||
//
|
|
||||||
// if (shadow) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// final Projection pj = mapView.getProjection();
|
|
||||||
// final int size = this.mInternalItemList.size() - 1;
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// * Draw in backward cycle, so the items with the least index are on the
|
|
||||||
// * front.
|
|
||||||
// */
|
|
||||||
// for (int i = size; i >= 0; i--) {
|
|
||||||
// final Item item = getItem(i);
|
|
||||||
// pj.toMapPixels(item.mGeoPoint, mCurScreenCoords);
|
|
||||||
//
|
|
||||||
// onDrawItem(canvas, item, mCurScreenCoords);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * Draws an item located at the provided screen coordinates to the canvas.
|
|
||||||
// *
|
|
||||||
// * @param canvas
|
|
||||||
// * what the item is drawn upon
|
|
||||||
// * @param item
|
|
||||||
// * the item to be drawn
|
|
||||||
// * @param curScreenCoords
|
|
||||||
// * the screen coordinates of the item
|
|
||||||
// */
|
|
||||||
// protected void onDrawItem(final Canvas canvas, final Item item, final Point curScreenCoords) {
|
|
||||||
// int state = 0;
|
|
||||||
//
|
|
||||||
// if (mDrawFocusedItem && (mFocusedItem == item))
|
|
||||||
// state = OverlayItem.ITEM_STATE_FOCUSED_MASK;
|
|
||||||
//
|
|
||||||
// Drawable marker;
|
|
||||||
//
|
|
||||||
// if (item.getMarker(state) == null)
|
|
||||||
// marker = getDefaultMarker(state);
|
|
||||||
// else
|
|
||||||
// marker = item.getMarker(state);
|
|
||||||
//
|
|
||||||
// boundToHotspot(marker, item.getMarkerHotspot());
|
|
||||||
//
|
|
||||||
// // draw it
|
|
||||||
// Overlay.drawAt(canvas, marker, curScreenCoords.x, curScreenCoords.y, false);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,6 @@ package org.oscim.layers.overlay;
|
|||||||
import org.oscim.core.GeoPoint;
|
import org.oscim.core.GeoPoint;
|
||||||
|
|
||||||
import android.graphics.Point;
|
import android.graphics.Point;
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Immutable class describing a GeoPoint with a Title and a Description.
|
* Immutable class describing a GeoPoint with a Title and a Description.
|
||||||
@ -57,7 +56,7 @@ public class OverlayItem {
|
|||||||
public final String mTitle;
|
public final String mTitle;
|
||||||
public final String mDescription;
|
public final String mDescription;
|
||||||
public final GeoPoint mGeoPoint;
|
public final GeoPoint mGeoPoint;
|
||||||
protected Drawable mMarker;
|
protected OverlayMarker mMarker;
|
||||||
protected HotspotPlace mHotspotPlace;
|
protected HotspotPlace mHotspotPlace;
|
||||||
|
|
||||||
// ===========================================================
|
// ===========================================================
|
||||||
@ -114,18 +113,18 @@ public class OverlayItem {
|
|||||||
* @return The marker for the current state, or null if the default marker
|
* @return The marker for the current state, or null if the default marker
|
||||||
* for the overlay should be used.
|
* for the overlay should be used.
|
||||||
*/
|
*/
|
||||||
public Drawable getMarker(final int stateBitset) {
|
public OverlayMarker getMarker(int stateBitset) {
|
||||||
// marker not specified
|
// marker not specified
|
||||||
if (mMarker == null) {
|
if (mMarker == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set marker state appropriately
|
// set marker state appropriately
|
||||||
setState(mMarker, stateBitset);
|
// setState(mMarker, stateBitset);
|
||||||
return mMarker;
|
return mMarker;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMarker(final Drawable marker) {
|
public void setMarker(OverlayMarker marker) {
|
||||||
this.mMarker = marker;
|
this.mMarker = marker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,28 +151,28 @@ public class OverlayItem {
|
|||||||
* R.attr.state_focused attributes, and then calling {@link
|
* R.attr.state_focused attributes, and then calling {@link
|
||||||
* Drawable.setState(int[])}.
|
* Drawable.setState(int[])}.
|
||||||
*/
|
*/
|
||||||
public static void setState(final Drawable drawable, final int stateBitset) {
|
// public static void setState(final Drawable drawable, final int stateBitset) {
|
||||||
final int[] states = new int[3];
|
// final int[] states = new int[3];
|
||||||
int index = 0;
|
// int index = 0;
|
||||||
if ((stateBitset & ITEM_STATE_PRESSED_MASK) > 0)
|
// if ((stateBitset & ITEM_STATE_PRESSED_MASK) > 0)
|
||||||
states[index++] = android.R.attr.state_pressed;
|
// states[index++] = android.R.attr.state_pressed;
|
||||||
if ((stateBitset & ITEM_STATE_SELECTED_MASK) > 0)
|
// if ((stateBitset & ITEM_STATE_SELECTED_MASK) > 0)
|
||||||
states[index++] = android.R.attr.state_selected;
|
// states[index++] = android.R.attr.state_selected;
|
||||||
if ((stateBitset & ITEM_STATE_FOCUSED_MASK) > 0)
|
// if ((stateBitset & ITEM_STATE_FOCUSED_MASK) > 0)
|
||||||
states[index++] = android.R.attr.state_focused;
|
// states[index++] = android.R.attr.state_focused;
|
||||||
|
//
|
||||||
drawable.setState(states);
|
// drawable.setState(states);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public Drawable getDrawable() {
|
// public Drawable getDrawable() {
|
||||||
return this.mMarker;
|
// return this.mMarker;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public int getWidth() {
|
// public int getWidth() {
|
||||||
return this.mMarker.getIntrinsicWidth();
|
// return this.mMarker.getIntrinsicWidth();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public int getHeight() {
|
// public int getHeight() {
|
||||||
return this.mMarker.getIntrinsicHeight();
|
// return this.mMarker.getIntrinsicHeight();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
124
src/org/oscim/layers/overlay/OverlayMarker.java
Normal file
124
src/org/oscim/layers/overlay/OverlayMarker.java
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||||
|
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.oscim.layers.overlay;
|
||||||
|
|
||||||
|
import org.oscim.core.PointF;
|
||||||
|
import org.oscim.layers.overlay.OverlayItem.HotspotPlace;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.Bitmap.Config;
|
||||||
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
|
||||||
|
public class OverlayMarker {
|
||||||
|
final Bitmap[] mBitmap;
|
||||||
|
// Hotspot offset
|
||||||
|
final PointF[] mOffset;
|
||||||
|
|
||||||
|
public OverlayMarker(Bitmap bitmap, float relX, float relY) {
|
||||||
|
mBitmap = new Bitmap[1];
|
||||||
|
mBitmap[0] = bitmap;
|
||||||
|
mOffset = new PointF[1];
|
||||||
|
mOffset[0] = new PointF(relX, relY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OverlayMarker(Bitmap bitmap, HotspotPlace hotspot) {
|
||||||
|
float x = 0, y = 0;
|
||||||
|
switch (hotspot) {
|
||||||
|
default:
|
||||||
|
case NONE:
|
||||||
|
break;
|
||||||
|
case CENTER:
|
||||||
|
x = 0.5f;
|
||||||
|
y = 0.5f;
|
||||||
|
break;
|
||||||
|
case BOTTOM_CENTER:
|
||||||
|
x = 0.5f;
|
||||||
|
y = 1.0f;
|
||||||
|
break;
|
||||||
|
case TOP_CENTER:
|
||||||
|
x = 0.5f;
|
||||||
|
y = 0.0f;
|
||||||
|
break;
|
||||||
|
case RIGHT_CENTER:
|
||||||
|
x = 1.0f;
|
||||||
|
y = 0.5f;
|
||||||
|
break;
|
||||||
|
case LEFT_CENTER:
|
||||||
|
x = 0.0f;
|
||||||
|
y = 0.5f;
|
||||||
|
break;
|
||||||
|
case UPPER_RIGHT_CORNER:
|
||||||
|
x = 1.0f;
|
||||||
|
y = 0.0f;
|
||||||
|
break;
|
||||||
|
case LOWER_RIGHT_CORNER:
|
||||||
|
x = 1.0f;
|
||||||
|
y = 1.0f;
|
||||||
|
break;
|
||||||
|
case UPPER_LEFT_CORNER:
|
||||||
|
x = 0.0f;
|
||||||
|
y = 0.0f;
|
||||||
|
break;
|
||||||
|
case LOWER_LEFT_CORNER:
|
||||||
|
x = 0.0f;
|
||||||
|
y = 1.0f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
mBitmap = new Bitmap[1];
|
||||||
|
mBitmap[0] = bitmap;
|
||||||
|
mOffset = new PointF[1];
|
||||||
|
mOffset[0] = new PointF(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PointF getHotspot() {
|
||||||
|
return mOffset[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public Bitmap getBitmap() {
|
||||||
|
return mBitmap[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Bitmap drawableToBitmap(Drawable drawable) {
|
||||||
|
if (drawable instanceof BitmapDrawable) {
|
||||||
|
return ((BitmapDrawable) drawable).getBitmap();
|
||||||
|
}
|
||||||
|
|
||||||
|
android.graphics.Bitmap bitmap = android.graphics.Bitmap.createBitmap(
|
||||||
|
drawable.getIntrinsicWidth(),
|
||||||
|
drawable.getIntrinsicHeight(),
|
||||||
|
Config.ARGB_8888);
|
||||||
|
|
||||||
|
android.graphics.Canvas canvas = new android.graphics.Canvas(bitmap);
|
||||||
|
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
|
||||||
|
drawable.draw(canvas);
|
||||||
|
|
||||||
|
return bitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static OverlayMarker makeMarker(Resources res, int id, HotspotPlace place) {
|
||||||
|
return makeMarker(res.getDrawable(id), place);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static OverlayMarker makeMarker(Drawable drawable, HotspotPlace place) {
|
||||||
|
|
||||||
|
if (place == null)
|
||||||
|
place = HotspotPlace.CENTER;
|
||||||
|
|
||||||
|
return new OverlayMarker(drawableToBitmap(drawable), place);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user