Ja, es ist möglich, dass Sie unser Selbstinformationsfenster für Anzeigeinformation über Tap in der Karte entwerfen sollten Ich bin Liefercode für Sie, wenn Sie verstehen, dass Sie mich bitte wiederholen.
public class MapLocationOverlay extends Overlay {
private boolean isNameAddHold=true;
private Bitmap bitmap,bitCross,bitMoreInformation;
int testX,testY,count=0;
int infoWindowOffsetX,infoWindowOffsetY;
public String name,address,argName,argAddress,argid;
// Store these as global instances so we don't keep reloading every time
private Bitmap bubbleIcon, shadowIcon;
private MapLocationViewer mapLocationViewer;
double toLat, toLng;
private Paint innerPaint, borderPaint, textPaint;
private boolean isRemovePriorPopup=false;
private boolean temp=true,first=true, firstDraw = true;
public boolean tempDefaule=true;
public MoreInformation myMoreInformation;
public PantryLocation location;
// The currently selected Map Location...if any is selected. This tracks whether an information
// window should be displayed & where...i.e. whether a user 'clicked' on a known map location
private PantryLocation selectedMapLocation;
public MapLocationOverlay(MapLocationViewer mapLocationViewer,PantryLocation arglocation) {
this.mapLocationViewer = mapLocationViewer;
location=arglocation;
bubbleIcon = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.bubble);
shadowIcon = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.shadow);
bitmap = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.infowindow);
bitCross = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.crass);
bitMoreInformation = BitmapFactory.decodeResource(mapLocationViewer.getResources(),R.drawable.more_informations_new);
}
@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView) {
// TODO Auto-generated method stub
if (e.getAction() == 0)
{
this.tempDefaule=false;
}
if (e.getAction() == 1)
{
this.tempDefaule=false;
}
if (e.getAction() == 2)
{
this.tempDefaule=false;
}
return super.onTouchEvent(e, mapView);
}
@Override
public boolean onTap(GeoPoint p, MapView mapView) {
//this.tempDefaule=false;
// Store whether prior popup was displayed so we can call invalidate() & remove it if necessary.
// Next test whether a new popup should be displayed
selectedMapLocation = getHitMapLocation(mapView,p);
mapView.invalidate();
// Lastly return true if we handled this onTap()
return selectedMapLocation != null;
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
drawMapLocations(canvas, mapView, shadow);
//this.tempDefaule=false;
drawInfoWindow(canvas, mapView, shadow);
//this.tempDefaule=false;
}
/**
* Test whether an information balloon should be displayed or a prior balloon hidden.
*/
private PantryLocation getHitMapLocation(MapView mapView, GeoPoint tapPoint) {
// Track which MapLocation was hit...if any
PantryLocation hitMapLocation = null;
RectF hitTestRecr = new RectF();
Point screenCoords = new Point();
ArrayList<PantryLocation> iterator =mapLocationViewer.getMapLocations();
for(int i=0;i<iterator.size();i++) {
PantryLocation testLocation = iterator.get(i);
// Translate the MapLocation's lat/long coordinates to screen coordinates
mapView.getProjection().toPixels(testLocation.getPoint(), screenCoords);
// Create a 'hit' testing Rectangle w/size and coordinates of our icon
// Set the 'hit' testing Rectangle with the size and coordinates of our on screen icon
hitTestRecr.set(-bubbleIcon.getWidth()/2,-bubbleIcon.getHeight(),bubbleIcon.getWidth()/2,0);
hitTestRecr.offset(screenCoords.x,screenCoords.y);
// Finally test for a match between our 'hit' Rectangle and the location clicked by the user
mapView.getProjection().toPixels(tapPoint, screenCoords);
//hitMapLocation = testLocation;
if (hitTestRecr.contains(screenCoords.x,screenCoords.y)) {
hitMapLocation = testLocation;
first = true;
isNameAddHold = true;
break;
}
}
testX=(int)screenCoords.x;
testY=(int)screenCoords.y;
// Lastly clear the newMouseSelection as it has now been processed
tapPoint = null;
if(hitMapLocation==null && selectedMapLocation!=null)
return selectedMapLocation;
return hitMapLocation;
}
private void drawMapLocations(Canvas canvas, MapView mapView, boolean shadow) {
int i=0;count++;
ArrayList<PantryLocation> iterator =mapLocationViewer.getMapLocations();
Point screenCoords = new Point();
for(i=0;i<iterator.size();i++) {
PantryLocation location = iterator.get(i);
mapView.getProjection().toPixels(location.getPoint(), screenCoords);
//mapView.getController().setCenter(location.getPoint());
if (shadow) {
// Only offset the shadow in the y-axis as the shadow is angled so the base is at x=0;
canvas.drawBitmap(shadowIcon, screenCoords.x, screenCoords.y - shadowIcon.getHeight(),null);
} else {
canvas.drawBitmap(bubbleIcon, screenCoords.x - bubbleIcon.getWidth()/2, screenCoords.y - bubbleIcon.getHeight(),null);
}
}
// if(i==iterator.size()){
// this.tempDefaule=false;}
if(tempDefaule==true)
{
PantryLocation location1 = this.location;
//mapView.getProjection().toPixels(location.getPoint(), screenCoords);
Point screenCoord = new Point();
mapView.getController().setCenter(location1.getPoint());
mapView.getController().setZoom(15);
// tempDefaule=false;
//mapView.getController().setCenter(location.getPoint());
}
//tempDefaule=false;
} //mapView.getProjection().toPixels(location.getPoint(), screenCoord);
//canvas.drawBitmap(bubbleIcon, screenCoord.x - bubbleIcon.getWidth()/2, screenCoord.y - bubbleIcon.getHeight(),null);
//mapView.invalidate();
private void drawInfoWindow(Canvas canvas, MapView mapView, boolean shadow) {
//this.tempDefaule=false;
if (selectedMapLocation != null) {
if (shadow) {
// Skip painting a shadow in this tutorial
} else {
// First determine the screen coordinates of the selected MapLocation
isRemovePriorPopup=true;
Point selDestinationOffset = new Point();
mapView.getProjection().toPixels(selectedMapLocation.getPoint(), selDestinationOffset);
// Setup the info window with the right size & location
int INFO_WINDOW_WIDTH = 125;
int INFO_WINDOW_HEIGHT = 25;
RectF infoWindowRect = new RectF(0,0,100,20);
RectF closeRect = new RectF(0,0,20,20);
infoWindowOffsetX = selDestinationOffset.x-INFO_WINDOW_WIDTH/2;
infoWindowOffsetY = selDestinationOffset.y-INFO_WINDOW_HEIGHT-bubbleIcon.getHeight();
infoWindowRect.offset(infoWindowOffsetX+95,infoWindowOffsetY-45);
closeRect.offset(infoWindowOffsetX+160,infoWindowOffsetY-90);
Paint myPaintBlack=new Paint();
Paint myPaintWhite=new Paint();
myPaintWhite.setARGB(255, 255, 255, 255);
// Draw inner info window
canvas.drawRoundRect(infoWindowRect, 5, 5, getInnerPaint());
// Draw border for info window
canvas.drawRoundRect(infoWindowRect, 5, 5, getBorderPaint());
// Draw the MapLocation's name
myPaintBlack.setColor(Color.BLACK);
myPaintBlack.setTextSize(20);
canvas.drawBitmap(bitmap, infoWindowOffsetX-50, infoWindowOffsetY-100,getInnerPaint());
if(isNameAddHold)
{
argid=selectedMapLocation.getID();
argName=selectedMapLocation.getName();
name=selectedMapLocation.getName();
toLat = selectedMapLocation.getLatitude();
toLng = selectedMapLocation.getLongitude();
if(name.length()>18)
name=selectedMapLocation.getName().substring(0,18)+"..";
argAddress=selectedMapLocation.getAddress();
address=selectedMapLocation.getAddress();
if(address.length()>30)
address=selectedMapLocation.getAddress().substring(0,30)+"..";
}
canvas.drawText(name,infoWindowOffsetX-45,infoWindowOffsetY-70,myPaintBlack);
myPaintBlack.setTextSize(13);
canvas.drawText(address,infoWindowOffsetX-45,infoWindowOffsetY-55,myPaintBlack);
// Draw inner info window
canvas.drawRoundRect(infoWindowRect, 5, 5, getInnerPaint());
// Draw border for info window
canvas.drawRoundRect(infoWindowRect, 5, 5, getBorderPaint());
// Draw the MapLocation's name
myPaintBlack.setColor(Color.CYAN);
myPaintBlack.setTextSize(11);
//canvas.drawText("Click for more info..",infoWindowOffsetX+105,infoWindowOffsetY-33,myPaintBlack);
canvas.drawBitmap(bitMoreInformation, infoWindowOffsetX+95, infoWindowOffsetY-45,getInnerPaint());
//canvas.drawBitmap(bitCross, infoWindowOffsetX+160, infoWindowOffsetY-90,getInnerPaint());
}
}
if(isRemovePriorPopup)
{
if(((testX>(infoWindowOffsetX+95)&&testX<(infoWindowOffsetX+195)))&&(testY>(infoWindowOffsetY-45)&&testY<(infoWindowOffsetY-25)))
{
if(temp){
try
{
temp=false;
isNameAddHold=false;
isRemovePriorPopup=false;
Context context=mapLocationViewer.cn;
Toast.makeText(context, "Loading...", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(context, MoreInformation.class);
intent.putExtra("Id",argid);
intent.putExtra("Name",argName);
intent.putExtra("Address",argAddress);
intent.putExtra("Latitude",toLat);
intent.putExtra("Longitude",toLng);
context.startActivity(intent);
}
catch (Exception ex)
{
Log.d("Redirected Error :", ex.getMessage());
}
//canvas.drawText("This is for Testing",testX,testY,myPaintBlack);
}}
else if(((testX>(infoWindowOffsetX+160)&&testX<(infoWindowOffsetX+180)))&&(testY>(infoWindowOffsetY-90)&&testY<(infoWindowOffsetY-70)))
{
if(isRemovePriorPopup)
{
isRemovePriorPopup=false;
selectedMapLocation=null;
draw(canvas, mapView, shadow);
// mapLocationViewer.setDZoom();
}
}
}
}
public Paint getInnerPaint() {
if (innerPaint == null) {
innerPaint = new Paint();
innerPaint.setARGB(225, 75, 75, 75); //gray
innerPaint.setAntiAlias(true);
}
return innerPaint;
}
public Paint getBorderPaint() {
if (borderPaint == null) {
borderPaint = new Paint();
borderPaint.setARGB(255, 255, 255, 255);
borderPaint.setAntiAlias(true);
borderPaint.setStyle(Style.STROKE);
borderPaint.setStrokeWidth(2);
}
return borderPaint;
}
public Paint getTextPaint() {
if (textPaint == null) {
textPaint = new Paint();
textPaint.setARGB(255, 255, 255, 255);
textPaint.setAntiAlias(true);
}
return textPaint;
}
}
In diesem Code habe ich eine Funktion Infofenster zeichnen entwerfen
mögliche Duplikate von [Wie Pop-up auf Klick-Karten-Overlay angezeigt werden?] (Http://stackoverflow.com/questions/2379654/how-to-show-pop-up -on-click-map-overlay) –
Diese Frage wurde bereits diskutiert. Finden Sie die Details [hier] (http://stackoverflow.com/questions/2379654/how-to-show-pop-up-on-clicking-map-overlay). – Sandy
Ich habe gesehen, dass .it meine Zweifel nicht erfüllt, ich brauche ein Popup genau int Bild. – Srinivas