如何添加覆盖在谷歌地图API V2 |安卓| [英] How to add overlay in google maps API v2 | Android |

查看:135
本文介绍了如何添加覆盖在谷歌地图API V2 |安卓|的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近买了对Android的谷歌地图API V2工作,偶然发现了另一个障碍。我无法弄清楚如何添加一个覆盖,如API V1显示使用LAT和长期某些位置的标记。我也希望它开始在同一个镇使用长和土地增值税。我至今增加了一些code的在地图的起始位置,但没有奏效。我想我应该把它写在所有的Java,而不是XML的布局,但我不知道如何解决SupportMapFragment做任何事情。

这是主要的活动,我使用SUPPORTMAPFRAGMENT代替MapFragment并将preFER不转。

 包com.example.maps;

进口android.os.Bundle;
进口android.support.v4.app.FragmentActivity;
进口com.google.android.gms.maps.SupportMapFragment;

公共类主要扩展FragmentActivity {

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);

    SupportMapFragment片段=新SupportMapFragment();
    getSupportFragmentManager()的BeginTransaction()
            。新增(android.R.id.content,片段).commit();
    }
}
 

这是XML

 < XML版本=1.0编码=UTF-8&GT?;
<片段的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
的xmlns:地图=htt​​p://schemas.android.com/apk/res-auto
  机器人:ID =@ + ID /图
   机器人:名称=com.google.android.gms.maps.SupportMapFragment
   机器人:layout_width =WRAP_CONTENT
   机器人:layout_height =match_parent
   图:cameraBearing =112.5
   图:cameraTargetLat = -  33.796923
   图:cameraTargetLng =150.922433
   图:cameraTilt =30
   图:cameraZoom =13
   图:地图类型=正常
   图:uiCompass =假
   图:uiRotateGestures =真
   图:uiScrollGestures =假
   图:uiTiltGestures =真
   图:uiZoomControls =假
   图:uiZoomGestures =真/>
 

修改

新的Java code(我排除入口和包,但他们都在那里。)

 公共类主要扩展FragmentActivity {

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);

    SupportMapFragment片段=新SupportMapFragment();
    getSupportFragmentManager()的BeginTransaction()
            。新增(android.R.id.content,片段).commit();

    GoogleMap的GoogleMap的;
    使用GoogleMap =((SupportMapFragment)(getSupportFragmentManager()findFragmentById(R.id.map))。)的GetMap()。
    经纬度经纬度=新的经纬度(-33.796923,150.922433);
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    googleMap.addMarker(新MarkerOptions()
            .position(经纬度)
            .title伪(我的位置)
            是.snippet(这是我的位置!)
            .icon(BitmapDesc​​riptorFactory.defaultMarker(BitmapDesc​​riptorFactory.HUE_AZURE)));
    googleMap.getUiSettings()setCompassEnabled(真)。
    googleMap.getUiSettings()setZoomControlsEnabled(真)。
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(经纬度,10));
}
 

}

新的错误

  1月1日至2日:16:53.333:D / AndroidRuntime(916):关闭虚拟机
1月1日至2日:16:53.333:W / dalvikvm(916):主题ID = 1:螺纹退出与未捕获的异常(组= 0x40a70930)
1月1日至2日:16:53.363:E / AndroidRuntime(916):致命异常:主要
1月1日至2日:16:53.363:E / AndroidRuntime(916):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.example.maps / com.example.maps.Main}:显示java.lang.NullPointerException
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.os.Handler.dispatchMessage(Handler.java:99)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.os.Looper.loop(Looper.java:137)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.app.ActivityThread.main(ActivityThread.java:5039)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在java.lang.reflect.Method.invokeNative(本机方法)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在java.lang.reflect.Method.invoke(Method.java:511)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在dalvik.system.NativeStart.main(本机方法)
1月1日至2日:16:53.363:E / AndroidRuntime(916):由:显示java.lang.NullPointerException
1月1日至2日:16:53.363:E / AndroidRuntime(916):在com.example.maps.Main.onCreate(Main.java:19)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.app.Activity.performCreate(Activity.java:5104)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
1月1日至2日:16:53.363:E / AndroidRuntime(916):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
1月1日至2日:16:53.363:E / AndroidRuntime(916):11 ...更多
 

解决方案

您可以在的onCreate FragmentActivity

  GoogleMap的GoogleMap的;
        使用GoogleMap =((SupportMapFragment)(getSupportFragmentManager()findFragmentById(R.id.map))。)的GetMap()。
        经纬度经纬度=新的经纬度(-33.796923,150.922433);
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        googleMap.addMarker(新MarkerOptions()
                .position(经纬度)
                .title伪(我的位置)
                是.snippet(这是我的位置!)
                .icon(BitmapDesc​​riptorFactory.defaultMarker(BitmapDesc​​riptorFactory.HUE_AZURE)));
        googleMap.getUiSettings()setCompassEnabled(真)。
        googleMap.getUiSettings()setZoomControlsEnabled(真)。
        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(经纬度,10));
 

的端到端的解决方案应该是这样的布局...

 < XML版本=1.0编码=UTF-8&GT?;
<片段的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
          机器人:ID =@ + ID /图
          机器人:名称=com.google.android.gms.maps.SupportMapFragment
          机器人:layout_width =match_parent
          机器人:layout_height =match_parent/>
 

......像这样的活动...

 公共类NameOfYou​​rActivity扩展FragmentActivity {
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);

        的setContentView(R.layout.nameOfYou​​rLayout);

    GoogleMap的GoogleMap的;
    使用GoogleMap =((SupportMapFragment)(getSupportFragmentManager()findFragmentById(R.id.map))。)的GetMap()。
    经纬度经纬度=新的经纬度(-33.796923,150.922433);
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    googleMap.addMarker(新MarkerOptions()
            .position(经纬度)
            .title伪(我的位置)
            是.snippet(这是我的位置!)
            .icon(BitmapDesc​​riptorFactory.defaultMarker(BitmapDesc​​riptorFactory.HUE_AZURE)));
    googleMap.getUiSettings()setCompassEnabled(真)。
    googleMap.getUiSettings()setZoomControlsEnabled(真)。
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(经纬度,10));
}
 

I recently got working with Google Maps API v2 on Android and stumbled upon another obstacle. I cannot figure out how to add an overlay such as in API v1 to display a marker on certain locations using lat and long. I also want it to start in the same town using long and lat. I so far added some code in for the starting position of map BUT it didn't work. I guess I should write it all in java instead of the XML layout but I don't know how to address SupportMapFragment to do anything.

This is main activity, I am using SUPPORTMAPFRAGMENT instead of MapFragment and would prefer not to switch.

package com.example.maps;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.SupportMapFragment;

public class Main extends FragmentActivity {

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

    SupportMapFragment fragment = new SupportMapFragment();
    getSupportFragmentManager().beginTransaction()
            .add(android.R.id.content, fragment).commit();
    }
}

This is XML

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
   android:name="com.google.android.gms.maps.SupportMapFragment"
   android:layout_width="wrap_content"
   android:layout_height="match_parent"
   map:cameraBearing="112.5"
   map:cameraTargetLat="-33.796923"
   map:cameraTargetLng="150.922433"
   map:cameraTilt="30"
   map:cameraZoom="13"
   map:mapType="normal"
   map:uiCompass="false"
   map:uiRotateGestures="true"
   map:uiScrollGestures="false"
   map:uiTiltGestures="true"
   map:uiZoomControls="false"
   map:uiZoomGestures="true" />

EDIT

New Java code( I excluded imports and package but they are all there. )

public class Main extends FragmentActivity {

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

    SupportMapFragment fragment = new SupportMapFragment();
    getSupportFragmentManager().beginTransaction()
            .add(android.R.id.content, fragment).commit();

    GoogleMap googleMap;
    googleMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
    LatLng latLng = new LatLng(-33.796923, 150.922433);
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    googleMap.addMarker(new MarkerOptions()
            .position(latLng)
            .title("My Spot")
            .snippet("This is my spot!")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
    googleMap.getUiSettings().setCompassEnabled(true);
    googleMap.getUiSettings().setZoomControlsEnabled(true);
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
}

}

New errors

01-02 01:16:53.333: D/AndroidRuntime(916): Shutting down VM
01-02 01:16:53.333: W/dalvikvm(916): threadid=1: thread exiting with uncaught    exception (group=0x40a70930)
01-02 01:16:53.363: E/AndroidRuntime(916): FATAL EXCEPTION: main
01-02 01:16:53.363: E/AndroidRuntime(916): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.maps/com.example.maps.Main}: java.lang.NullPointerException
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.os.Looper.loop(Looper.java:137)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.app.ActivityThread.main(ActivityThread.java:5039)
01-02 01:16:53.363: E/AndroidRuntime(916):  at java.lang.reflect.Method.invokeNative(Native Method)
01-02 01:16:53.363: E/AndroidRuntime(916):  at java.lang.reflect.Method.invoke(Method.java:511)
01-02 01:16:53.363: E/AndroidRuntime(916):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-02 01:16:53.363: E/AndroidRuntime(916):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-02 01:16:53.363: E/AndroidRuntime(916):  at dalvik.system.NativeStart.main(Native Method)
01-02 01:16:53.363: E/AndroidRuntime(916): Caused by: java.lang.NullPointerException
01-02 01:16:53.363: E/AndroidRuntime(916):  at com.example.maps.Main.onCreate(Main.java:19)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.app.Activity.performCreate(Activity.java:5104)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-02 01:16:53.363: E/AndroidRuntime(916):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-02 01:16:53.363: E/AndroidRuntime(916):  ... 11 more

解决方案

You can add a marker in the onCreate of your FragmentActivity.

        GoogleMap googleMap;
        googleMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
        LatLng latLng = new LatLng(-33.796923, 150.922433);
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        googleMap.addMarker(new MarkerOptions()
                .position(latLng)
                .title("My Spot")
                .snippet("This is my spot!")
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
        googleMap.getUiSettings().setCompassEnabled(true);
        googleMap.getUiSettings().setZoomControlsEnabled(true);
        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));

The end to end solution would look like this for the layout...

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:name="com.google.android.gms.maps.SupportMapFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

...the Activity like this...

public class NameOfYourActivity extends FragmentActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.nameOfYourLayout);

    GoogleMap googleMap;
    googleMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap();
    LatLng latLng = new LatLng(-33.796923, 150.922433);
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    googleMap.addMarker(new MarkerOptions()
            .position(latLng)
            .title("My Spot")
            .snippet("This is my spot!")
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
    googleMap.getUiSettings().setCompassEnabled(true);
    googleMap.getUiSettings().setZoomControlsEnabled(true);
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
}

这篇关于如何添加覆盖在谷歌地图API V2 |安卓|的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆