Hi Treking,
thanks for your reply.BalloonItemizedOverlay is a class which extends
BalloonItemizedOverlay.
this is the BalloonItemizedOverlay implementation
public abstract class BalloonItemizedOverlay<Item> extends
ItemizedOverlay<OverlayItem> {
private MapView mapView;
private BalloonOverlayView balloonView;
private View clickRegion;
private int viewOffset;
final MapController mc;
private int id;
/**
* Create a new BalloonItemizedOverlay
*
* @param defaultMarker
* - A bounded Drawable to be drawn on the map for each
item in
* the overlay.
* @param mapView
* - The view upon which the overlay items are to be
drawn.
*/
public BalloonItemizedOverlay(Drawable defaultMarker, MapView
mapView) {
super(defaultMarker);
this.mapView = mapView;
viewOffset = 0;
mc = mapView.getController();
}
/**
* Set the horizontal distance between the marker and the bottom of
the
* information balloon. The default is 0 which works well for center
bounded
* markers. If your marker is center-bottom bounded, call this before
adding
* overlay items to ensure the balloon hovers exactly above the
marker.
*
* @param pixels
* - The padding between the center point and the bottom
of the
* information balloon.
*/
public void setBalloonBottomOffset(int pixels) {
viewOffset = pixels;
}
/**
* Override this method to handle a "tap" on a balloon. By default,
does
* nothing and returns false.
*
* @param index
* - The index of the item whose balloon is tapped.
* @return true if you handled the tap, otherwise false.
*/
protected boolean onBalloonTap(int index) {
id = index;
Toast.makeText(mapView.getContext(), "IDDD " + index,
Toast.LENGTH_LONG).show();
return false;
}
/*
* (non-Javadoc)
*
* @see com.google.android.maps.ItemizedOverlay#onTap(int)
*/
@Override
protected final boolean onTap(int index) {
boolean isRecycled;
final int thisIndex;
GeoPoint point;
thisIndex = index;
point = createItem(index).getPoint();
if (balloonView == null) {
balloonView = new
BalloonOverlayView(mapView.getContext(),
viewOffset);
clickRegion = (View) balloonView
.findViewById(R.id.balloon_inner_layout);
isRecycled = false;
} else {
isRecycled = true;
}
balloonView.setVisibility(View.GONE);
List<Overlay> mapOverlays = mapView.getOverlays();
if (mapOverlays.size() > 1) {
hideOtherBalloons(mapOverlays);
}
balloonView.setData(createItem(index));
MapView.LayoutParams params = new MapView.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, point,
MapView.LayoutParams.BOTTOM_CENTER);
params.mode = MapView.LayoutParams.MODE_MAP;
setBalloonTouchListener(thisIndex);
balloonView.setVisibility(View.VISIBLE);
if (isRecycled) {
balloonView.setLayoutParams(params);
} else {
mapView.addView(balloonView, params);
}
mc.animateTo(point);
/*Toast.makeText(mapView.getContext(), "indexdss " + index,
Toast.LENGTH_LONG).show();*/
return true;
}
/**
* Sets the visibility of this overlay's balloon view to GONE.
*/
private void hideBalloon() {
if (balloonView != null) {
balloonView.setVisibility(View.GONE);
}
}
/**
* Hides the balloon view for any other BalloonItemizedOverlay
instances
* that might be present on the MapView.
*
* @param overlays
* - list of overlays (including this) on the MapView.
*/
private void hideOtherBalloons(List<Overlay> overlays) {
for (Overlay overlay : overlays) {
if (overlay instanceof BalloonItemizedOverlay<?> &&
overlay !=
this) {
((BalloonItemizedOverlay<?>)
overlay).hideBalloon();
}
}
}
/**
* Sets the onTouchListener for the balloon being displayed, calling
the
* overridden onBalloonTap if implemented.
*
* @param thisIndex
* - The index of the item whose balloon is tapped.
*/
private void setBalloonTouchListener(final int thisIndex) {
try {
@SuppressWarnings("unused")
Method m =
this.getClass().getDeclaredMethod("onBalloonTap",
int.class);
clickRegion.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent
event) {
View l = ((View) v.getParent())
.findViewById(R.id.balloon_main_layout);
Drawable d = l.getBackground();
if (event.getAction() ==
MotionEvent.ACTION_DOWN) {
int[] states = {
android.R.attr.state_pressed };
if (d.setState(states)) {
d.invalidateSelf();
}
return true;
} else if (event.getAction() ==
MotionEvent.ACTION_UP) {
int newStates[] = {};
if (d.setState(newStates)) {
d.invalidateSelf();
}
// call overridden method
onBalloonTap(thisIndex);
NearestLocation near =
MapInfo.nearestArray[thisIndex];
/*Toast.makeText(mapView.getContext(), "index Touch :- " +
near.getPartname() + thisIndex,
Toast.LENGTH_LONG).show();*/
return true;
} else {
return false;
}
}
});
} catch (SecurityException e) {
Log.e("BalloonItemizedOverlay",
"setBalloonTouchListener reflection
SecurityException");
return;
} catch (NoSuchMethodException e) {
// method not overridden - do nothing
return;
}
}
}
but why it's always giving the index of 0?
regards,
Mike
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en