본문 바로가기

Programming

[Android Studio] Fragment에서 MapView

#android #mapview #fragment #mapfragment

 

Fragment에서 Mapview를 띄웠습니다.

구글맵 API는 불러왔다는 전제하에 시작합니다.

 

 

//실행화면

 

 

 

//소스코드

LocationFragment.java

package com.google.fuck; 

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.ContentView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMapOptions;
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.fuck.R;


public class LocationFragment extends Fragment implements OnMapReadyCallback, GoogleMap.OnInfoWindowClickListener{
    MapView sView = null;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_stu_location , container, false);

        //mapview 부름
        sView = view.findViewById(R.id.s_map);
        sView.onCreate(savedInstanceState);
        sView.getMapAsync(this);


        return view;
    }

    //이 메서드가 없으면 지도가 보이지 않음
    @Override
    public void onStart() {
        super.onStart();
        sView.onStart();
    }

    @Override
    public void onStop () {
        super.onStop();
        sView.onStop();

    }

    @Override
    public void onSaveInstanceState (@Nullable Bundle outState){
        super.onSaveInstanceState(outState);
        sView.onSaveInstanceState(outState);
    }

    @Override
    public void onResume() {
        super.onResume();
        sView.onResume();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        sView.onLowMemory();
    }
    
    //맵뷰 설정
    @Override
    public void onMapReady(GoogleMap googleMap) {
            //마커찍기(위도,경도)
            LatLng solnae = new LatLng(35.869253, 127.129006);

            //마커 옵션
            MarkerOptions marker = new MarkerOptions();
            marker.position(solnae); //마커 위치
            marker.title("솔내청소년수련관");
            marker.snippet("전주시 덕진구 송천1동 동부대로 1079"); 

            //맵에 마커표시, 인포윈도우 보여줌
            googleMap.addMarker(marker).showInfoWindow();

            //인포윈도우 클릭
            googleMap.setOnInfoWindowClickListener(this);

            //맵뷰 카메라위치, 줌 설정
            googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(solnae, 13));
    }

        //인포윈도우 클릭 리스너
        @Override
        public void onInfoWindowClick (Marker marker){

        }
        
}



 

fragment_Loaction.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.google.android.gms.maps.MapView
        android:id="@+id/s_map"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="100" />
</LinearLayout>