【问题标题】:Error in marker options icon标记选项图标错误
【发布时间】:2014-10-10 16:24:27
【问题描述】:

我想使用 Google Maps V2 获取用户的当前位置。我收到此错误,方法 icon(bitmapdescriptor) 未定义类型标记。

这是我基于android + google map api v2 + current location的代码

import android.app.Dialog;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Getting Google Play availability status
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());
    // Showing status
    if(status!=ConnectionResult.SUCCESS){ // Google Play Services not available
        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
        dialog.show();
    }
    else{ // Google Play Services are available
        // Getting reference to the SupportMapFragment of activity_main.xml
        SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        // Getting Google Map object from the fragment
        GoogleMap googleMap = fm.getMap();
        // Enabling MyLocation Layer of Google
        googleMap.setMyLocationEnabled(true);
        // Getting LocationManager object from System Service LOCATION_SERVICE
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        // Creating a criteria object to retrieve provider
        Criteria criteria = new Criteria();
        // Getting the name of the best provider
        String provider = locationManager.getBestProvider(criteria, true);
        // Getting current location
        Location location = locationManager.getLastKnownLocation(provider);
        LocationListener locationListener = new LocationListener(){
            public void onLocationChanged(Location location){
                // Redraw the marker when get location update
                drawMarker(location);
            }

            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStatusChanged(String provider, int status,
                    Bundle extras) {
                // TODO Auto-generated method stub

            }
        };
        if(location!=null){
            // Place the initial marker
            drawMarker(location);
        }
        locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
    }
}

private void drawMarker(Location location){
    SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    GoogleMap googleMap = fm.getMap();
    googleMap.clear();
    LatLng currentPosition = new LatLng(location.getLatitude(),location.getLongitude());
    googleMap.addMarker(new MarkerOptions()
    .position(currentPosition)
    .snippet("Lat:" + location.getLatitude() + "Lng" + location.getLongitude()))
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
    .title("ME");
}

如果我将 .icon 替换为 .setIcon,则整个新的 MarkerOptions() 为红色,并且出现此错误,无法在原始类型 void 上调用 title(String)。我该怎么办?

【问题讨论】:

    标签: android eclipse google-maps


    【解决方案1】:

    您在创建标记时放错了括号,因此无法识别方法 icontitle

    将您的代码替换为:

    mMap.addMarker(new MarkerOptions()
            .position(currentPosition)
            .snippet("Lat:" + location.getLatitude() + "Lng" + location.getLongitude())
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
            .title("ME"));
    

    这很明显,因为 MarkerOptions 对象没有 setIcon 方法,但 Marker 有一个。在地图中添加MarkerOptions 会返回一个Marker 对象:-)

    为了清楚起见,您可以像这样设置图标:

    Marker myMarker = mMap.addMarker(new MarkerOptions()
            .position(currentPosition)
            .snippet("Lat:" + location.getLatitude() + "Lng" + location.getLongitude())
            .title("ME"));
    
    myMarker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
    

    【讨论】:

    • 嗨@user3249477!您的回答确实有效!我非常感谢您抽出时间来回答。我只知道 Android 应用程序,我正在研究我们的论文。再次感谢您!
    • @RalphAnthonyMagante 不客气 :) 编码愉快!
    猜你喜欢
    • 2014-03-17
    • 2021-02-23
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多