Pergunta

Criei uma classe de sobreposição personalizada para que eu pudesse essencialmente ter um tipo de sobreposição cujo marcador desenhado se estabeleceria, dependendo do estado de alguns dados que eu passo para ele.

Eu tentei conseguir isso, na minha primeira tentativa, utilizando o setMarker Método dentro da classe OverlayItem. Uma vez que não funcionou, tento substituir o getMarker Método e peça que ele retorne o marcador apropriado para representar os dados.

Ambas as tentativas terminaram com nada sendo desenhado no mapa ... no entanto, se forem comentadas, os marcadores desenham muito bem (exceto que eles obviamente usam o marcador padrão, o que não é o que eu quero).

Aqui está o meu código para minha classe OverlayItem personalizada (os métodos comentados que tentei e eles não funcionaram):

private class MyOverlayItem extends OverlayItem {
    private Context mContext;
    private MyData mData;

    public MyOverlayItem(GeoPoint point, MyData data, Context context) {
        super(point, data.getWhat(), data.getWhere());
        this.mContext = context;
        this.mData = data;

        /*if(data.getTemp() > 200)
            this.setMarker(res.getDrawable(R.drawable.icon_data_hot_l));
        else if(data.getTemp() > 100)
            this.setMarker(res.getDrawable(R.drawable.icon_data_neutral_l));
        else
            this.setMarker(res.getDrawable(R.drawable.icon_data_frozen_l));*/
    }

    /*@Override
    public Drawable getMarker(int stateBitset) {
        Resources res = this.mContext.getResources();
        if(this.mData.getTemp() > 200)
            return res.getDrawable(R.drawable.icon_data_hot_l);
        else if(this.mData.getTemp() > 100)
            return res.getDrawable(R.drawable.icon_data_neutral_l);
        return res.getDrawable(R.drawable.icon_data_frozen_l);
    }*/
}

Existe uma maneira de fazer o que estou tentando fazer ... ou preciso fazer uma classe de sobreposição única correspondente a cada estado dos meus dados? (Ai credo.)

Foi útil?

Solução

Consegui fazer com que os marcadores apareçam, no entanto, eles estão aparecendo de cabeça para baixo (pelo menos, acho que são, pode ser que a sombra deles esteja na parte superior esquerda e não na parte inferior direita).

Tudo que eu precisava fazer era adicionar esta linha:

this.mMarker.setBounds(0, 0, this.mMarker.getIntrinsicWidth(), this.mMarker.getIntrinsicHeight());

... assim como esta linha para orientar corretamente os marcadores (adicionei isso quando meu itemizedOverlay adiciona item de sobreposição de bronze:

overlay.setMarker(boundCenterBottom(overlay.getMarker(0)));

Outras dicas

A API afirma que o marcador precisa ser exibido ...

@celestialorb qualquer um de seus trechos faz o trabalho sozinho (ou o meu funcionou com qualquer um deles) quando você usa setbounds () sozinho, você obtém o que diz para fazer ... a caixa delimitadora para o seu marcador está definida. A orientação para o ponto de vista e o estado das sombras do sobreposição, etc, é definido como padrão (não os procuraram, mas eles não fizeram o que eu quero ...) :)

Moverlay.setmarker (BoundCenterBottom (Moverlay.getmarker (0))); Faz o trabalho completo para você, definindo os limites e centralizando a parte inferior do marcador no ponto (daí o nome do método elegante).

Agora, quanto às práticas recomendadas, lâmpadas mais brilhantes do que terei que entrar em ...

Tente substituir o onDraw() Método da sua classe de sobreposição.

Aqui está outra abordagem:

GOOGLEMAPS: Custom iticedEverlay e OverlayItem, a maneira correta de mostrar marcador diferente

Eu acho que prefiro essa resposta ... obrigado!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top