美文网首页
谷歌地图在Activity和fragment中的简单使用

谷歌地图在Activity和fragment中的简单使用

作者: it奔跑在路上 | 来源:发表于2018-12-25 16:12 被阅读0次
ps:官方Demo及网上大部分内容都是在activity中的使用,现在对这部分内容进行总结:

1.在activity中的使用

implementation 'com.google.android.gms:play-services-maps:16.0.0'

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.google.android.gms.maps.MapFragment"/>
public class MainActivity extends FragmentActivity implements OnMapReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        /**
         * 在这里传经纬度即可
         */
        LatLng sydney = new LatLng(-37.812439, 144.972755);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15));

        googleMap.addMarker(new MarkerOptions()
//                .title("Sydney")
//                .snippet("The most populous city in Australia.")
                .position(sydney));
    }
}

permission

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE" />

key

 <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="你申请到的key"/>

-------------------------activity 使用 game over-------------------------

在fragment中的使用

<fragment
                android:id="@+id/map"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

在fragment中,只需要将activity中onCreate代码,改成在fragment中onCreateView里写,代码如下,其它代码不变。。。

SupportMapFragment mapFragment= (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
        if(mapFragment == null){
            FragmentManager fm= getFragmentManager();
            FragmentTransaction ft= fm.beginTransaction();
            mapFragment= SupportMapFragment.newInstance();
            ft.replace(R.id.map, mapFragment).commit();
        }
        mapFragment.getMapAsync(this);

ps:如果需要用户体验良好,需要处理事件冲突,地图外层可能有scrollview,可能用户在滑动地图的时候,scrollview进行了滑动。我这里是NestedScrollView,代码如下(scrollview处理方法一样):

package com.example.aiyang.toolbar.utlis;

import android.content.Context;
import android.support.v4.widget.NestedScrollView;
import android.util.AttributeSet;
import android.view.MotionEvent;

/**
 * @创建者 $ sloop on 2018/12/25.
 * @创建时间 2018/12/25
 *
 * 解决谷歌地图在NestedScrollView中事件冲突
 */
public class MyNestedScrollView extends NestedScrollView {
    public MyNestedScrollView(Context context) {
        super(context);
    }

    public MyNestedScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyNestedScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent. ACTION_UP) {
            requestDisallowInterceptTouchEvent( false); //手离开地图的时候不拦截scrollview的touch事件,这样手指滑动的时候scrollview就会滑动
        } else {
            requestDisallowInterceptTouchEvent( true); //底层view调用此方法后,true表示父层View的touch事件将不会被触发,父View不拦截事件,由子view自己处理
        }
        return false;
    }
}

相关文章

网友评论

      本文标题:谷歌地图在Activity和fragment中的简单使用

      本文链接:https://www.haomeiwen.com/subject/xsvflqtx.html