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;
}
}
网友评论