add option for non-billboard MarkerSymbols
This commit is contained in:
parent
113ea64297
commit
03f6f96988
@ -16,12 +16,13 @@
|
||||
*/
|
||||
package org.oscim.android.test;
|
||||
|
||||
import static org.oscim.android.canvas.AndroidGraphics.drawableToBitmap;
|
||||
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.oscim.android.canvas.AndroidGraphics;
|
||||
import org.oscim.backend.canvas.Bitmap;
|
||||
import org.oscim.core.GeoPoint;
|
||||
import org.oscim.layers.TileGridLayer;
|
||||
import org.oscim.layers.marker.ItemizedLayer;
|
||||
@ -37,6 +38,7 @@ import android.widget.Toast;
|
||||
public class MarkerOverlayActivity extends BitmapTileMapActivity
|
||||
implements OnItemGestureListener<MarkerItem> {
|
||||
|
||||
private static final boolean BILLBOARDS = true;
|
||||
private MarkerSymbol mFocusMarker;
|
||||
|
||||
public MarkerOverlayActivity() {
|
||||
@ -47,11 +49,23 @@ public class MarkerOverlayActivity extends BitmapTileMapActivity
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
Drawable d = getResources().getDrawable(R.drawable.marker_poi);
|
||||
MarkerSymbol symbol = AndroidGraphics.makeMarker(d, HotspotPlace.CENTER);
|
||||
/* directly load bitmap from resources */
|
||||
Bitmap bitmap = drawableToBitmap(getResources(), R.drawable.marker_poi);
|
||||
|
||||
d = getResources().getDrawable(R.drawable.ic_launcher);
|
||||
mFocusMarker = AndroidGraphics.makeMarker(d, HotspotPlace.BOTTOM_CENTER);
|
||||
MarkerSymbol symbol;
|
||||
if (BILLBOARDS)
|
||||
symbol = new MarkerSymbol(bitmap, HotspotPlace.CENTER);
|
||||
else
|
||||
symbol = new MarkerSymbol(bitmap, 0.5f, 0.5f, false);
|
||||
|
||||
/* another option: use some bitmap drawable */
|
||||
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
|
||||
if (BILLBOARDS)
|
||||
mFocusMarker = new MarkerSymbol(drawableToBitmap(d),
|
||||
HotspotPlace.BOTTOM_CENTER);
|
||||
else
|
||||
mFocusMarker = new MarkerSymbol(drawableToBitmap(d),
|
||||
0.5f, 0.5f, false);
|
||||
|
||||
ItemizedLayer<MarkerItem> markerLayer =
|
||||
new ItemizedLayer<MarkerItem>(mMap, new ArrayList<MarkerItem>(),
|
||||
|
@ -93,6 +93,13 @@ public final class AndroidGraphics extends CanvasAdapter {
|
||||
return new AndroidBitmap(bitmap);
|
||||
}
|
||||
|
||||
public static Bitmap drawableToBitmap(Resources res, int resId) {
|
||||
return new AndroidBitmap(res.openRawResource(resId));
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
public static MarkerSymbol makeMarker(Drawable drawable, HotspotPlace place) {
|
||||
if (place == null)
|
||||
place = HotspotPlace.CENTER;
|
||||
@ -100,6 +107,9 @@ public final class AndroidGraphics extends CanvasAdapter {
|
||||
return new MarkerSymbol(drawableToBitmap(drawable), place);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
public static MarkerSymbol makeMarker(Resources res, int resId, HotspotPlace place) {
|
||||
if (place == null)
|
||||
place = HotspotPlace.CENTER;
|
||||
|
@ -159,6 +159,7 @@ public class MarkerRenderer extends BucketRenderer {
|
||||
SymbolItem s = SymbolItem.pool.get();
|
||||
s.set(it.x, it.y, marker.getBitmap(), true);
|
||||
s.offset = marker.getHotspot();
|
||||
s.billboard = marker.isBillboard();
|
||||
mSymbolLayer.pushSymbol(s);
|
||||
}
|
||||
|
||||
|
@ -24,14 +24,25 @@ public class MarkerSymbol {
|
||||
final Bitmap[] mBitmap;
|
||||
/** Hotspot offset */
|
||||
final PointF mOffset;
|
||||
final boolean mBillboard;
|
||||
|
||||
public MarkerSymbol(Bitmap bitmap, float relX, float relY) {
|
||||
this(bitmap, relX, relY, true);
|
||||
}
|
||||
|
||||
public MarkerSymbol(Bitmap bitmap, float relX, float relY, boolean billboard) {
|
||||
mBitmap = new Bitmap[1];
|
||||
mBitmap[0] = bitmap;
|
||||
mOffset = new PointF(relX, relY);
|
||||
mBillboard = billboard;
|
||||
}
|
||||
|
||||
public MarkerSymbol(Bitmap bitmap, HotspotPlace hotspot) {
|
||||
this(bitmap, hotspot, true);
|
||||
}
|
||||
|
||||
public MarkerSymbol(Bitmap bitmap, HotspotPlace hotspot, boolean billboard) {
|
||||
|
||||
switch (hotspot) {
|
||||
case BOTTOM_CENTER:
|
||||
mOffset = new PointF(0.5f, 1);
|
||||
@ -63,7 +74,11 @@ public class MarkerSymbol {
|
||||
|
||||
mBitmap = new Bitmap[1];
|
||||
mBitmap[0] = bitmap;
|
||||
mBillboard = billboard;
|
||||
}
|
||||
|
||||
public boolean isBillboard() {
|
||||
return mBillboard;
|
||||
}
|
||||
|
||||
public PointF getHotspot() {
|
||||
@ -75,6 +90,7 @@ public class MarkerSymbol {
|
||||
}
|
||||
|
||||
public boolean isInside(float dx, float dy) {
|
||||
/* TODO handle no-billboard */
|
||||
int w = mBitmap[0].getWidth();
|
||||
int h = mBitmap[0].getHeight();
|
||||
float ox = -w * mOffset.x;
|
||||
@ -82,5 +98,4 @@ public class MarkerSymbol {
|
||||
|
||||
return dx >= ox && dy >= oy && dx <= ox + w && dy <= oy + h;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user