Как создать собственный диалог для элемента с наложением? - PullRequest
1 голос
/ 20 июня 2011

Итак, в тот момент, когда я щелкаю по элементу с наложением, я просто отображаю простой диалог, я хотел бы создать что-то большее в строках ниже

On tap dialog

Как мне сделать это для телефона Android>?

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

При переопределении ItemizedOverlay существует защищенный метод onTap.Он имеет индекс предмета в качестве параметра.Вы должны переопределить onTap и использовать этот индекс для получения правильного объекта данных.Например:

@Override
protected boolean onTap(int index) {
    getItem(index); \\your overlay item
    return true;
}

Затем вы должны создать собственный диалог из кода или раздуть макет XML, использовать правильные параметры макета, чтобы добавить его в MapView:

MapView.LayoutParams params = new MapView.LayoutParams(LayoutParams.WRAP_CONTENT,     
    LayoutParams.WRAP_CONTENT, point, 0, 0, MapView.LayoutParams.BOTTOM_CENTER);
    params.mode = MapView.LayoutParams.MODE_MAP;            
    MV.addView(popup, params);

MV - ваш экземпляр MapView;point - ваш оверлейный элемент GeoPoint;popup - ваш собственный диалог.

1 голос
/ 20 июня 2011

Я только что нашел способ сделать это: Расширьте OverlayItem и переопределите getMarker для возврата нового рисованного объекта.

package this.is.funny;</p>

<p>import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;</p>

<p>import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;</p>

<p>public class MyOverlayItem extends OverlayItem{
    private String title;
    private Context ctx;
    private NinePatchDrawable npd;
    private Rect textBox;
    private Paint p;</p>

<pre><code>public MyOverlayItem(Context ctx,GeoPoint point, String title, String snippet) {
    super(point, title, snippet);
    this.title=title;
    this.ctx=ctx;
    p=new Paint();

}


@Override
public Drawable getMarker(int stateBitset) {
    return new MyDrawable();
}
/**
 * 
 * I believe this method is the cleaniest way to do what we want. Not sure about it
 * @author emmanuel
 * This private class is a custom drawable with some text inside.
 */
private class MyDrawable extends Drawable{

    @Override
    public void draw(Canvas c) {            

        textBox = new Rect();
                    //this is ugly
        p.setFakeBoldText(true);
        p.setTextSize(16);
        p.setAlpha(50);
        p.getTextBounds(title, 0, title.length(), textBox);
        //p.setAlpha(255);
        NinePatchDrawable npd;
        npd=(NinePatchDrawable) 
</code>

ctx.getResources () getDrawable (R.drawable.geoloc);.

npd.setBounds(-(textBox.width()/2+15),-(textBox.height()+30),textBox.width()/2+15,0); npd.draw(c); p.setColor(Color.WHITE); p.setAlpha(255); c.drawText(title,-textBox.width()/2,-30,p); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } @Override public void setAlpha(int alpha) { // TODO Auto-generated method stub } @Override public void setColorFilter(ColorFilter cf) { // TODO Auto-generated method stub } }

}

...