App/Kotlin
[Android_API] 네이버 지도 안드로이드에서 사용하기 (액티비티, 프래그먼트)
Cune
2022. 3. 24. 14:47
네이버 지도 api를 사용하기 위한 기본 셋팅은 아래 링크로 가서 준비했다고 생각하고 시작합니다.
시작하기 · 네이버 지도 안드로이드 SDK
No results matching ""
navermaps.github.io
네이버 공식문서 [개발가이드]-[지도와 좌표]-[지도 객체] 에서는 MapFragment와 MapView 두가지 방법이 나와있습니다.
MapFragment의 경우는 액티비티에 지도만 띄워주고 MapView는 액티비티 지정영역에 지도를 띄울 수 있습니다.
왼쪽 <MapFragment> / 오른쪽 <MapView>
설명코드대로 실행시켰을때 다음과 같이 나옵니다. (저는 지도보기버튼 클릭시 나타나도록 설정했습니다)
1. GlobalApplication ( sdk초기화 설정)
import android.app.Application
import com.naver.maps.map.NaverMapSdk
class GlobalApplication:Application() {
override fun onCreate() {
super.onCreate()
// NaverMap SDK
NaverMapSdk.getInstance(this).client =
NaverMapSdk.NaverCloudPlatformClient("클라이언트 아이디")
}
}
2. MainActivity (메인 액티비티)
사용하는 방식에 따라서 2-1 / 2-2를 사용하면 됩니다
지도보기 버튼('seeMapBtn'), 2-2 지도 영역 프레임 레이아웃('mapContent')
class MainActivity : AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.seeMapBtn.setOnClickListener { //seeMapBtn 클릭 시
//2-1. MapActivity로 연결해서 화면이동
/*val i = Intent(this, MapActivity::class.java)
startActivity(i)*/
//2-2. Fragment로 연결해서 현재 액티비티에 띄우기
/*val naverMapFragment = NaverMapFragment()
supportFragmentManager.beginTransaction()
.add(R.id.mapContent, naverMapFragment).commit()*/
//R.id.() 괄호에는 띄우고자 설정했던 영역의 아이디
}
}
2-1. MapActivity -> 'MapFragment'방식
import android.os.Bundle
import androidx.annotation.UiThread
import androidx.fragment.app.FragmentActivity
import com.naver.maps.geometry.LatLng
import com.naver.maps.map.*
import com.naver.maps.map.overlay.Marker
class MapActivity : FragmentActivity(), OnMapReadyCallback {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)
val fm = supportFragmentManager
val mapFragment = fm.findFragmentById(R.id.map) as MapFragment?
?: MapFragment.newInstance().also {
fm.beginTransaction().add(R.id.map, it).commit()
}
mapFragment.getMapAsync(this)
}
@UiThread
override fun onMapReady(naverMap: NaverMap) {
val options = NaverMapOptions()
.camera(CameraPosition(LatLng(37.566, 126.978), 10.0)) // 카메라 위치 (위도,경도,줌)
.mapType(NaverMap.MapType.Basic) //지도 유형
.enabledLayerGroups(NaverMap.LAYER_GROUP_BUILDING) //빌딩 표시
MapFragment.newInstance(options)
val marker = Marker()
marker.position = LatLng(37.566, 126.978)
marker.map = naverMap
}
}
activity_map.xml
<?xml version="1.0" encoding="utf-8"?>
<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.naver.maps.map.MapFragment" />
2-2. NaverMapFragment -> 'MapView'방식
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.naver.maps.geometry.LatLng
import com.naver.maps.map.*
import com.naver.maps.map.overlay.Marker
class NaverMapFragment : Fragment(), OnMapReadyCallback {
//지도 객체 변수
private lateinit var mapView: MapView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val rootView = inflater.inflate(
R.layout.fragment_naver_map,
container, false
) as ViewGroup
mapView = rootView.findViewById<View>(R.id.navermap) as MapView
mapView.onCreate(savedInstanceState)
mapView.getMapAsync(this)
return rootView
}
override fun onMapReady(naverMap: NaverMap) {
val options = NaverMapOptions()
.camera(CameraPosition(LatLng(37.566, 126.978), 10.0)) // 카메라 위치 (위도,경도,줌)
.mapType(NaverMap.MapType.Basic) //지도 유형
.enabledLayerGroups(NaverMap.LAYER_GROUP_BUILDING) //빌딩 표시
MapFragment.newInstance(options)
val marker = Marker()
marker.position = LatLng(37.566, 126.978)
marker.map = naverMap
}
override fun onStart() {
super.onStart()
mapView.onStart()
}
override fun onResume() {
super.onResume()
mapView.onResume()
}
override fun onPause() {
super.onPause()
mapView.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
mapView.onSaveInstanceState(outState)
}
override fun onStop() {
super.onStop()
mapView.onStop()
}
override fun onDestroyView() {
super.onDestroyView()
mapView.onDestroy()
}
override fun onLowMemory() {
super.onLowMemory()
mapView.onLowMemory()
}
}
fragment_naver_map.xml
<?xml version="1.0" encoding="utf-8"?>
<com.naver.maps.map.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/navermap"
android:layout_width="match_parent"
android:layout_height="match_parent" />
아래 블로그 글을 참조해서 작성했습니다 감사합니다.
https://andro-jinu.tistory.com/entry/studio3
[안드로이드 스튜디오] 네이버지도 #3 - 플래그먼트에서 표출하기
이번 포스팅에서는 네이버 클라우드 플랫폼에서 제공하는 네이버지도를 Activity가 아닌 플래그먼트에서 표출하는 방법을 살펴보도록 하겠습니다. 이전 포스트에서 MapView를 사용하여 네이버 지
andro-jinu.tistory.com