【问题标题】:How to set marker on center of the map?如何在地图中心设置标记?
【发布时间】:2016-03-03 01:53:32
【问题描述】:

我想在我的应用程序中使用地图视图,它会在我们拖动地图时显示标记位置。为此,我知道可以通过将标记设置在地图中心来完成,因此当我们拖动地图时,我们可以获得当前位置的地址。像这样:

但我不知道如何实现这一点。希望我能从这里得到帮助。

ChooseFromMapActivity

public class ChooseFromMapActivity extends AppCompatActivity implements GoogleMap.OnCameraChangeListener {

    TextView textShowAddress;
    private GoogleMap mMap;
    LatLng latLng;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_choose_from_map);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mMap = mapFragment.getMap();

        mMap.getUiSettings().setZoomControlsEnabled(true);
        mMap.getUiSettings().setRotateGesturesEnabled(true);
        mMap.getUiSettings().setScrollGesturesEnabled(true);

        latLng = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(latLng).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

        textShowAddress = (TextView) findViewById(R.id.textShowAddress);

        if (Build.VERSION.SDK_INT >= 21) {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));
        }
  }
    @Override
    public void onCameraChange(CameraPosition position) {
        mMap.clear();
        mMap.addMarker( new MarkerOptions()
                        .position( position.target )
                        .title( position.toString() )
        );
    }
}

【问题讨论】:

  • 查看下面的答案

标签: java android center android-mapview marker


【解决方案1】:

根据您的标记位置调整地图为:

latLang = marker.getPosition(); // get LatLang object
map.setCenter(latLang); //set google maps instance with that object of LatLang

您也可以尝试另一种方法,将相机位置移动为:

map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), zoom));

【讨论】:

  • 感谢您的回复。它在 setCenter 上显示错误。无法解析方法 setCenter。
  • 它给出的纬度和经度错误。我已经初始化了变量。不知道怎么回事。你能详细给我看一下代码吗??
【解决方案2】:
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(location, 16));
mMap.addMarker(new MarkerOptions()
        .position(location)
        .draggable(false)
        .title("sent location :)"));

【讨论】:

  • 谢谢您的回复...我不明白位置变量是干什么用的??它是一个 Latlang 变量吗?
  • 这只是将相机移动到该位置。它不会像我想要的那样为标记提供拖动效果。
  • @user3623979 是的,它是一个纬度变量
  • 是的,我已经尝试过此代码,但在拖动地图时它没有显示任何结果。
【解决方案3】:

试试这个代码:

mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) 
{
    if(mMarker==null)
    {
        mMarker = mMap.addMarker(new MarkerOptions().position(cameraPosition.target).title("Marker in Sydney")
                .icon(BitmapDescriptorFactory.fromResource(R.mipmap.marker_ico)));
        mMarker.showInfoWindow();
    }
    else
    {
        mMarker.setPosition(cameraPosition.target);
    }
}
});

唯一的问题是您的标记仅在地图拖动结束时才会移动到地图中心。您只需添加 ImageView 并将其粘贴到地图片段的中心即可避免此问题。之后你可以使用 mMarker.setVisible(false);隐藏您的标记并仅显示 ImageView 作为您的标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2019-11-27
    • 2019-08-02
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多