地图标记未显示

时间:2016-01-17 09:58:00

标签: android google-maps android-fragments android-studio

我需要在地图上添加一个标记并自动对焦到该标记。我按照Map project的说明进行操作 映射加载到片段但不显示标记。我是android的初学者。我尝试了很多例子。但没有找到答案。请帮忙。询问是否需要更多细节。谢谢。

fragment_profile.xml

<fragment
        android:id="@+id/map_fragment"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:layout_below="@id/text_profile_location"
        android:layout_marginTop="10dp"
        android:layout_weight="1" />

FragmentProfile.java

public class FragmentProfile extends android.app.Fragment{

private GoogleMap googleMap;
private EditText textBirthdate;

public FragmentProfile() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    final View rootView = inflater.inflate(R.layout.fragment_profile, container, false);

    googleMap = ((MapFragment) this.getChildFragmentManager().findFragmentById(
            R.id.map_fragment)).getMapAsync(this););
return rootView;
}

@Override
public void onMapReady(GoogleMap googleMap) {
    double latitude = 37;
    double longitude = 127;

    MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps ");
    Log.e("Latitude", "127");
    // adding marker
    googleMap.addMarker(marker);
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 11);
    googleMap.animateCamera(update);
}

}

4 个答案:

答案 0 :(得分:1)

将标记添加到地图后,您必须将“相机”移动到该位置。

        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(latLng, 11);
        googleMap.animateCamera(update);

修改 不要从initializeMap致电onCreateView,因为此时MapFragment还没有准备就绪。由于你的尝试捕获,你没有看到问题。如果您想查看记录的例外情况,请使用Log.e(,,e)代替e.printStackTrace

因此,您需要将initializeMap发布到处理程序或使用getMapAsync,然后按照pRaNaY的建议,实施OnMapReadyCallback以了解地图何时准备就绪。

更多修改 发布新代码后... 首先,您发布的新代码甚至无法编译,因为getMapAsync不会返回GoogleMap。 其次,当你调用findFragmentById时,(Child)FragmentManager尚未添加MapsFragment,因此不会找到片段。将findFragmentByIdgetMapAsync来电移至onResume或将其发布给处理程序。

答案 1 :(得分:1)

您只需添加MapMarkerOptions的<Window.Resources> <DataTemplate x:Key="Template1"> <hx:MyMeshGeometryModel3D Geometry="{Binding Geometry}" Transform="{Binding Transform}" Material="{Binding Material}"/> </DataTemplate> <hx:RenderTechniqueConverter x:Key="RenderTechniqueConverter"/> </Window.Resources> <hx:Viewport3DX x:Name="helixViewport" Camera="{Binding Camera}" CameraRotationMode="Trackball" RenderTechnique="{Binding RenderTechnique}" RenderTechniquesManager="{Binding RenderTechniquesManager}" EffectsManager="{Binding EffectsManager}" BackgroundColor="{Binding BackgroundColor}" UseDefaultGestures="False"> <hx:Viewport3DX.InputBindings> <MouseBinding Gesture="LeftClick" Command="hx:ViewportCommands.Rotate"/> <MouseBinding Gesture="MiddleClick" Command="hx:ViewportCommands.Zoom"/> <MouseBinding Gesture="RightClick" Command="hx:ViewportCommands.Pan"/> </hx:Viewport3DX.InputBindings> <hx:AmbientLight3D Color="{Binding AmbientLightColor}"/> <hx:DirectionalLight3D Color="{Binding DirectionalLightColor1}" Direction="-1,-1,-1"/> <hx:DirectionalLight3D Color="{Binding DirectionalLightColor2}" Direction="1,-1,-0.1"/> <hx:DirectionalLight3D Color="{Binding DirectionalLightColor3}" Direction="0.1,1,-1"/> <hx:DirectionalLight3D Color="{Binding DirectionalLightColor4}" Direction="0.1,0.1,1"/> <hx:ItemsModel3D x:Name="itemsModel3d" ItemTemplate="{StaticResource Template1}" ItemsSource="{Binding Items}"/> </hx:Viewport3DX> 即可。 如下所示:

.icon(..)

<强>编辑: 您需要实施OnMapReadyCallback并在MarkerOptions marker = new MarkerOptions() .icon(BitmapDescriptorFactory.fromResource(R.drawable.your_marker)); .position(new LatLng(latitude, longitude)).title("Hello Maps "); 中添加标记。

@Override
public void onMapReady(GoogleMap map) {
... }

请参阅here

答案 2 :(得分:1)

尝试指定放置标记的Map。如果未在构建标记时指定地图,则会创建标记,但不会在地图上附加/显示标记。您可以通过调用 setMap()方法添加标记。

这是setMap()方法的示例代码:

var marker = new google.maps.Marker();
marker.setPosition(new google.maps.LatLng(47.3732589, 8.2382168));
marker.setMap(map);

我希望它对你有所帮助。

答案 3 :(得分:0)

有趣的是,我能够在@sorianiv和@pRaNaY的帮助下找到答案。我在最后一步做的是,使用 MapFragment mapFragment = (MapFragment) this.getChildFragmentManager() .findFragmentById(R.id.map_fragment); mapFragment.getMapAsync(this); 代替 googleMap = ((MapFragment) this.getChildFragmentManager().findFragmentById( R.id.map_fragment)).getMapAsync(this););。 谢谢你们。