Java 如何更改标记';地图上有什么颜色?

Java 如何更改标记';地图上有什么颜色?,java,android,google-maps,Java,Android,Google Maps,我需要一些帮助来更改标记颜色,在android中使用android studio 我把所有的标记都放在地图上。太好了 我想在用户选择点时显示一条消息。要确定,用户必须在标记中单击两次 一切正常,用户这样做,我改变颜色和标记的变化 但是,当我单击另一个标记或地图中的任何位置时,颜色返回原始颜色 我好像换错了标记(另一个对象) 这是打印标记的方法 public void plot(){ NumberFormat format = new DecimalFormat("0");

我需要一些帮助来更改标记颜色,在android中使用android studio

我把所有的标记都放在地图上。太好了

我想在用户选择点时显示一条消息。要确定,用户必须在标记中单击两次

一切正常,用户这样做,我改变颜色和标记的变化

但是,当我单击另一个标记或地图中的任何位置时,颜色返回原始颜色

我好像换错了标记(另一个对象)

这是打印标记的方法

public void plot(){
        NumberFormat format = new DecimalFormat("0");
        for (Coordinate c: pointsList) {
            LatLng temp = new LatLng(c.getLat(), c.getLng());
            Marker marker = mMap.addMarker(new MarkerOptions()
                    .position(temp)
                    .title("Ponto " + c.getDescricao())
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
            marker.setTag("Ponto " + c.getDescricao());
        }
    }
我有一个听众,他可以通过两个选项显示消息,确认或取消:

@Override
    public void onDialogPositiveClick(DialogFragment dialog) {
        getSelectedPoint().setSnippet("Selected!");
                getSelectedPoint().setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));

    }

有人能帮我吗?我需要颜色保持蓝色,而不是红色

编辑1:当我再次点击标记时,颜色是正确的,蓝色。但是,当在另一个位置单击时,颜色将返回为红色

编辑2:代码

public class Navigator extends FragmentActivity
        implements FragmentoDialogo.NoticeDialogListener, OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {      

    private static Marker pontoSelecionado;    

    public Marker getPontoSelecionado() {
        return pontoSelecionado;
    }

    public void setPontoSelecionado(Marker pontoSelecionado) {
        this.pontoSelecionado = pontoSelecionado;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this /* FragmentActivity */,
                        this /* OnConnectionFailedListener */)
                .addConnectionCallbacks(this)
                .addApi(LocationServices.API)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .build();
        mGoogleApiClient.connect();

        Bundle b = getIntent().getExtras();
        pointsList = b.getParcelableArrayList("Points");

        setContentView(R.layout.navigator_ac);

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        plotarPontosDeColeta();
        plotarCaminhamento();

        escutarCliqueMarcador();
        // Turn on the My Location layer and the related control on the map.
        updateLocationUI();

        // Get the current location of the device and set the position of the map.
        getDeviceLocation();

        LatLng ponto1 = new LatLng(pointsList.get(1).getLat(), pointsList.get(1).getLng());

        CameraPosition cameraPos = new CameraPosition.Builder().target(ponto1)
                .zoom(45).bearing(20).tilt(80).build();

        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPos), null);
    }

    public void plotarPontosDeColeta(){
        NumberFormat format = new DecimalFormat("0");
        for (Coordinate c: pointsList) {
            LatLng temp = new LatLng(c.getLat(), c.getLng());
            Marker marker = mMap.addMarker(new MarkerOptions()
                    .position(temp)
                    .title("Ponto " + c.getDescricao())
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
            marker.setTag("Ponto " + c.getDescricao());
        }
    }

    private void plotarCaminhamento() {
        NumberFormat format = new DecimalFormat("0");

        ArrayList<Polyline> listaLinhas = new ArrayList<>();
        final ArrayList<MarkerOptions> listaMarcadores = new ArrayList<>();
        PolylineOptions lineOptions;

        try {
            for (int i=0; i<pointsList.size(); i++){
                LatLng aux1 = new LatLng(pointsList.get(i).getLat(),pointsList.get(i).getLng());
                LatLng aux2 = new LatLng(pointsList.get(i+1).getLat(),pointsList.get(i+1).getLng());
                lineOptions = new PolylineOptions().clickable(true).add(aux1).add(aux2);
                Polyline polyline = mMap.addPolyline(lineOptions);
                polyline.setTag(i);
                listaLinhas.add(polyline);

                listaMarcadores.add(new MarkerOptions()
                        .position(PointsHandler.encontrarPontoMedio(aux1, aux2))
                        .alpha(0f)
                        .title(""+ format.format(pointsList.get(i).getDistanciaProximoPonto()) + "m"));
            }
        } catch (Exception e){
            //TODO
        }

        mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener(){
            @Override
            public void onPolylineClick(Polyline polyline)
            {
                int tag = (Integer) polyline.getTag();
                mMap.addMarker(listaMarcadores.get(tag)).showInfoWindow();
            }
        });
    }

    public void escutarCliqueMarcador(){
        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                if (getPontoSelecionado() == null) {
                    setPontoSelecionado(marker);
                    Toast.makeText(getBaseContext(), "Clique novamente para confirmar!", Toast.LENGTH_SHORT).show();
                    return false;
                }

                if (getPontoSelecionado().getTag().equals(marker.getTag())) {
                    showDialog();
                } else {
                    setPontoSelecionado(marker);
                    Toast.makeText(getBaseContext(), "Clique novamente para confirmar!", Toast.LENGTH_SHORT).show();
                }

                return false;
            }
        });
    }

    public void showDialog() {
        DialogFragment dialog = new FragmentoDialogo();
        dialog.show(getFragmentManager(), "FragmentoDialogo");
    }
    @Override
    public void onDialogPositiveClick(DialogFragment dialog) {
        getPontoSelecionado().setSnippet("Coleta efetuada");
        getPontoSelecionado().setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
        getPontoSelecionado().showInfoWindow();            
    }

    @Override
    public void onDialogNegativeClick(DialogFragment dialog) {
        Toast.makeText(getBaseContext(), "Ponto não confirmado", Toast.LENGTH_SHORT).show();
    }
}
公共类导航器扩展碎片活动
在MapreadyCallback、GoogleAppClient.ConnectionCallbacks、GoogleAppClient.OnConnectionFailedListener{
专用静态标记器pontoSelecionado;
公共标记getPontoSelecionado(){
返回pontoSelecionado;
}
公共无效设置pontoSelecionado(标记pontoSelecionado){
this.pontoSelecionado=pontoSelecionado;
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mgoogleapclient=新的Googleapclient.Builder(此)
.enableAutoManage(此/*碎片活动*/,
此/*OnConnectionFailedListener*/)
.addConnectionCallbacks(此)
.addApi(LocationServices.API)
.addApi(Places.GEO_数据_API)
.addApi(Places.PLACE\u DETECTION\u API)
.build();
mGoogleApiClient.connect();
Bundle b=getIntent().getExtras();
pointsList=b.getParcelableArrayList(“点”);
setContentView(R.layout.navigator_ac);
MapFragment MapFragment=(MapFragment)getFragmentManager()
.findFragmentById(R.id.map);
getMapAsync(这个);
}
@凌驾
4月1日公开作废(谷歌地图谷歌地图){
mMap=谷歌地图;
plotarponosdecoleta();
Plotarcaminahamento();
escutarciquemarcador();
//打开“我的位置”图层和地图上的相关控件。
updateLocationUI();
//获取设备的当前位置并设置地图的位置。
getDeviceLocation();
LatLng ponto1=新LatLng(pointsList.get(1.getLat(),pointsList.get(1.getLng());
CameraPosition cameraPos=新建CameraPosition.Builder().target(ponto1)
.缩放(45).方位(20).倾斜(80).构建();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPos),null);
}
公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图公共空间规划图{
NumberFormat格式=新的十进制格式(“0”);
用于(坐标c:点列表){
车床温度=新车床(c.getLat(),c.getLng());
Marker Marker=mMap.addMarker(新MarkerOptions()
.职位(临时)
.title(“Ponto”+c.GetDescriptio())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
marker.setTag(“Ponto”+c.getdescripcao());
}
}
阿卡米纳门托私人酒店{
NumberFormat格式=新的十进制格式(“0”);
ArrayList listaLinhas=新建ArrayList();
最终ArrayList listaMarcadores=新ArrayList();
折线选项线选项;
试一试{
对于(int i=0;i我自己解决了它


我创建了一个
坐标
向量作为类属性,从构造函数和添加到该向量的
plot()
方法中开始。出于某种原因,我使用了不同的实例。

似乎您调用了
plot()
标记颜色更改后再次。标记用
RED
颜色重新创建。看起来像,但我没有调用。我在
onMapReady()中调用了
plot()
一次
plot()
请与
plot()共享您的源代码
call.Tnks@AndriiOmelchenko。我已经更新了我的问题,并提出了最重要的方法。这是原始代码,
plot()
方法,实际上是
plotarponosdecoleta()
。巴西代码。。。
public class Navigator extends FragmentActivity
        implements FragmentoDialogo.NoticeDialogListener, OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {      

    private static Marker pontoSelecionado;    

    public Marker getPontoSelecionado() {
        return pontoSelecionado;
    }

    public void setPontoSelecionado(Marker pontoSelecionado) {
        this.pontoSelecionado = pontoSelecionado;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this /* FragmentActivity */,
                        this /* OnConnectionFailedListener */)
                .addConnectionCallbacks(this)
                .addApi(LocationServices.API)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .build();
        mGoogleApiClient.connect();

        Bundle b = getIntent().getExtras();
        pointsList = b.getParcelableArrayList("Points");

        setContentView(R.layout.navigator_ac);

        MapFragment mapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        plotarPontosDeColeta();
        plotarCaminhamento();

        escutarCliqueMarcador();
        // Turn on the My Location layer and the related control on the map.
        updateLocationUI();

        // Get the current location of the device and set the position of the map.
        getDeviceLocation();

        LatLng ponto1 = new LatLng(pointsList.get(1).getLat(), pointsList.get(1).getLng());

        CameraPosition cameraPos = new CameraPosition.Builder().target(ponto1)
                .zoom(45).bearing(20).tilt(80).build();

        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPos), null);
    }

    public void plotarPontosDeColeta(){
        NumberFormat format = new DecimalFormat("0");
        for (Coordinate c: pointsList) {
            LatLng temp = new LatLng(c.getLat(), c.getLng());
            Marker marker = mMap.addMarker(new MarkerOptions()
                    .position(temp)
                    .title("Ponto " + c.getDescricao())
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
            marker.setTag("Ponto " + c.getDescricao());
        }
    }

    private void plotarCaminhamento() {
        NumberFormat format = new DecimalFormat("0");

        ArrayList<Polyline> listaLinhas = new ArrayList<>();
        final ArrayList<MarkerOptions> listaMarcadores = new ArrayList<>();
        PolylineOptions lineOptions;

        try {
            for (int i=0; i<pointsList.size(); i++){
                LatLng aux1 = new LatLng(pointsList.get(i).getLat(),pointsList.get(i).getLng());
                LatLng aux2 = new LatLng(pointsList.get(i+1).getLat(),pointsList.get(i+1).getLng());
                lineOptions = new PolylineOptions().clickable(true).add(aux1).add(aux2);
                Polyline polyline = mMap.addPolyline(lineOptions);
                polyline.setTag(i);
                listaLinhas.add(polyline);

                listaMarcadores.add(new MarkerOptions()
                        .position(PointsHandler.encontrarPontoMedio(aux1, aux2))
                        .alpha(0f)
                        .title(""+ format.format(pointsList.get(i).getDistanciaProximoPonto()) + "m"));
            }
        } catch (Exception e){
            //TODO
        }

        mMap.setOnPolylineClickListener(new GoogleMap.OnPolylineClickListener(){
            @Override
            public void onPolylineClick(Polyline polyline)
            {
                int tag = (Integer) polyline.getTag();
                mMap.addMarker(listaMarcadores.get(tag)).showInfoWindow();
            }
        });
    }

    public void escutarCliqueMarcador(){
        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                if (getPontoSelecionado() == null) {
                    setPontoSelecionado(marker);
                    Toast.makeText(getBaseContext(), "Clique novamente para confirmar!", Toast.LENGTH_SHORT).show();
                    return false;
                }

                if (getPontoSelecionado().getTag().equals(marker.getTag())) {
                    showDialog();
                } else {
                    setPontoSelecionado(marker);
                    Toast.makeText(getBaseContext(), "Clique novamente para confirmar!", Toast.LENGTH_SHORT).show();
                }

                return false;
            }
        });
    }

    public void showDialog() {
        DialogFragment dialog = new FragmentoDialogo();
        dialog.show(getFragmentManager(), "FragmentoDialogo");
    }
    @Override
    public void onDialogPositiveClick(DialogFragment dialog) {
        getPontoSelecionado().setSnippet("Coleta efetuada");
        getPontoSelecionado().setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
        getPontoSelecionado().showInfoWindow();            
    }

    @Override
    public void onDialogNegativeClick(DialogFragment dialog) {
        Toast.makeText(getBaseContext(), "Ponto não confirmado", Toast.LENGTH_SHORT).show();
    }
}