반응형
프래그먼트 정적 추가
- 지도를 처리할 활동의 레이아웃 파일에 fragment 요소 추가
<?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:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
지도 인터페이스 구현
MainActivity
- implements OnMapReadyCallback
- 메소드 추가
- onMapReady : 지도를 사용할 준비가 되면 호출되는 메소드
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
}
구글 맵 기본 설정
- MainActivity onCreate
// 구글 맵 설정
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
실행 화면
- onMapReady 메소드에 아무런 코드를 적어주지 않아 구글 지도만 실행
내 위치 기준으로 지도 보여주기
- onMapReady
// 내 위치 위도 경도 설정
LatLng myLocation = new LatLng( 37.5428428, 126.6772096);
// 내 위치 기준 지도 출력
googleMap.moveCamera(CameraUpdateFactory.newLatLng(myLocation));
// 내 위치 기준 지도 확대 출력, 숫자가 클수록 Zoom
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 19));
특정 위치에 마커 설정하기
- onMapReady
// 내 위치 위도 경도 설정
LatLng myLocation = new LatLng( 37.5428428, 126.6772096);
// 내 위치의 마커 설정하기
googleMap.addMarker(new MarkerOptions().position(myLocation).title("마커1"));
특정 위치의 마커 색상 변경하기
- onMapReady
// 내 위치 위도 경도 설정
LatLng myLocation = new LatLng( 37.5428428, 126.6772096);
// 기본 마커 설정 (기본 색상은 빨강)
googleMap.addMarker(new MarkerOptions().position(myLocation).title("마커1"));
// 마커 색상 시안으로 변경
googleMap.addMarker(new MarkerOptions().position(new LatLng(37.5438428, 126.6772096)).title("마커2"))
.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN));
구글 맵의 지도 유형 설정하기
- onMapReady
- MAP_TYPE_NOMAL : 일반 지도
- MAP_TYPE_HYBRID : 하이브리드 지도
- MAP_TYPE_TERRAIN : 지형 지도
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
마커 클릭시 이벤트 발생하기
MainActivity
- implements GoogleMap.OnMarkerClickListener
- 메소드 추가
마커 클릭시 메시지 출력
- onMapReady
- setTag(index)
googleMap.addMarker(new MarkerOptions().position(new LatLng(37.5428428, 126.6762096))
.title("마커1")).setTag(0);
googleMap.setOnMarkerClickListener(this);
- onMarkerClick
- onMarkerClick 메소드 파라미터에 Marker 설정
- marker.getTag() 로 인덱스 접근하여 해당 마커 클릭시 이벤트 발생
@Override
public boolean onMarkerClick(@NonNull Marker marker) {
int index = (int) marker.getTag();
if ( index == 0 ) {
Toast.makeText(getApplication(), "marker click", Toast.LENGTH_LONG).show();
}
return false;
}
- 마커 클릭시 메시지 출력
전체 소스
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 구글 맵 설정
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
// 지도를 사용할 준비가 되면 호출되는 메소드
@Override
public void onMapReady(@NonNull GoogleMap googleMap) {
// 내 위치 기준 지도 출력 설정
LatLng myLocation = new LatLng( 37.5428428, 126.6772096);
//googleMap.moveCamera(CameraUpdateFactory.newLatLng(myLocation));
// 내 위치 기준 지도 확대 출력 설정, 숫자가 클수록 Zoom
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 17));
// 내 위치의 마커 설정하기
googleMap.addMarker(new MarkerOptions().position(myLocation).title("마커1"));
// 마커 색상 변경
googleMap.addMarker(new MarkerOptions().position(new LatLng(37.5438428, 126.6772096))
.title("마커2")).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN));
// 마커의 인덱스 설정, onMarkerClick 메소드에서 기능 정의
googleMap.addMarker(new MarkerOptions().position(new LatLng(37.5428428, 126.6762096))
.title("마커3")).setTag(0);
// 지도 타입 변경
//googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
// onMarkerClick 메소드 호출
googleMap.setOnMarkerClickListener(this);
}
// 마커 클릭시 이벤트 발생 메소드
@Override
public boolean onMarkerClick(@NonNull Marker marker) {
int index = (int) marker.getTag();
if ( index == 0 ) {
Toast.makeText(getApplication(), "marker click", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplication(), "else", Toast.LENGTH_LONG).show();
}
return false;
}
}
반응형