Hi,
I am working maps. I am displaying different locations using
marker. When i tap on the marker i can be to display a popup which
will display always on the top screen, but how can i display exactly
on the top of marker...
here is my ItemizedOverlay Class..
private class SitesOverlay extends ItemizedOverlay<OverlayItem> {
private List<OverlayItem> items = new ArrayList<OverlayItem>();
private Drawable marker = null;
private PopupPanel panel = new PopupPanel(R.layout.popup);
public SitesOverlay(Drawable marker) {
super(marker);
this.marker = marker;
for (int i = 0; i < dealersDataList.size(); i++) {
items.add(new OverlayItem(getPoint(
Double.parseDouble(dealersDataList.get(i).latitude),
Double.parseDouble(dealersDataList.get(i).longitude)), ""
+ dealersDataList.get(i).id, ""
+ dealersDataList.get(i).name));
}
populate();
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean
shadow) {
super.draw(canvas, mapView, shadow);
boundCenterBottom(marker);
}
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
// ---when user lifts his finger---
if (event.getAction() == 1) {
panel.hide();
}
return false;
}
@Override
protected OverlayItem createItem(int i) {
return (items.get(i));
}
@Override
protected boolean onTap(final int i) {
Log.d("", "");
OverlayItem item = getItem(i);
GeoPoint geo = item.getPoint();
Point pt = map.getProjection().toPixels(geo, null);
map.getController().setCenter(geo);
View view = panel.getView();
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent
event) {
if(event.getAction() ==
MotionEvent.ACTION_UP){
// System.out.println("YAHOOOOOOO
"+dealersDataList.get(i).name);
}
return true;
}
});
//String message=""+ jsonValues.get(i).name +"\nBikes
:"+jsonValues.get(i).bikesAvailable+"
Slots:"+jsonValues.get(i).emptySlots;
//Toast.makeText(getApplicationContext(), message,
Toast.LENGTH_LONG).show();
((TextView)
view.findViewById(R.id.longitude)).setText("Name :
"+dealersDataList.get(i).name);
((TextView)
view.findViewById(R.id.x)).setText("\nAddress :
"+dealersDataList.get(i).address+" Contact Number
:"+dealersDataList.get(i).phoneNum);
Button more = (Button) view.findViewById(R.id.more);
more.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("YAHOOOOOOO
"+dealersDataList.get(i).name);
}
});
panel.show(pt.y * 2 > map.getHeight());
setPanel(panel);
return false;
}
@Override
public int size() {
return (items.size());
}
}
private void setPanel(PopupPanel panel2) {
// TODO Auto-generated method stub
panel = panel2;
}
class PopupPanel {
View popup;
boolean isVisible = false;
PopupPanel(int layout) {
ViewGroup parent = (ViewGroup) map.getParent();
popup = getLayoutInflater().inflate(layout, parent,
false);
popup.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
hide();
}
});
}
View getView() {
return (popup);
}
void show(boolean alignTop) {
RelativeLayout.LayoutParams lp = new
RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
if (alignTop) {
lp.addRule(RelativeLayout.ALIGN_TOP);
lp.setMargins(20, height/4, 20, 0);
} else {
lp.addRule(RelativeLayout.ALIGN_TOP);
lp.setMargins(20, height/4, 20, 0);
}
hide();
map.addView(popup, lp);
//((ViewGroup) map.getParent()).addView(popup, lp);
isVisible = true;
}
void hide() {
if (isVisible) {
isVisible = false;
((ViewGroup)
popup.getParent()).removeView(popup);
}
}
void forceHide() {
try{
((ViewGroup) popup.getParent()).removeView(popup);
}catch(NullPointerException e){
}
}
}
--
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