我需要在地图上添加一个标记并自动对焦到该标记。我按照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);
}
}
答案 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,因此不会找到片段。将findFragmentById
和getMapAsync
来电移至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););
。
谢谢你们。