Open kyoungjoosin opened 2 years ago
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingConstraints"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="match_parent" android:layout_height="60dp"> <TextView android:id="@+id/tv_username" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:textSize="17sp" android:textColor="@color/black" android:text="merrygoround"/> <ImageView android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_width="30dp" android:layout_height="30dp" android:scaleType="fitXY" android:src="@drawable/mego"/> </RelativeLayout> <ImageView android:id="@+id/img_main" android:layout_width="match_parent" android:layout_height="300dp" android:src="@drawable/mego" android:scaleType="centerCrop"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="60dp"> <ImageView android:id="@+id/ic_like" android:layout_width="100dp" android:layout_height="100dp" android:layout_centerVertical="true" android:layout_marginLeft="7dp" android:scaleType="fitXY" android:src="@drawable/like_icon" /> <TextView android:layout_toRightOf="@id/ic_like" android:layout_marginLeft="10dp" android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/black" android:textStyle="normal" android:textSize="15sp" android:text="View More"/> </RelativeLayout> </LinearLayout> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rc_mainProfile" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scrollbars="vertical"/> </LinearLayout> <androidx.fragment.app.FragmentContainerView android:id="@+id/map" android:name="com.naver.maps.map.MapFragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:layout="@layout/item" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <androidx.cardview.widget.CardView android:id="@+id/card_view" android:layout_width="338dp" android:layout_height="383dp" android:layout_gravity="center" card_view:cardCornerRadius="4dp"> </androidx.cardview.widget.CardView> <Button android:id="@+id/btnOrder" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="3dp" android:layout_marginTop="580dp" android:background="@drawable/mego" android:paddingLeft="30dp" android:paddingRight="30dp" android:text="카페와 음식점" android:textColor="#ff0" /> </RelativeLayout> </LinearLayout>
package com.test.navermap; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; public class ImageMainAdapter extends RecyclerView.Adapter<ImageMainAdapter.MainImageHolder> { List<Integer> mainImageSources=new ArrayList<>(); public void addMainImage(int img){ mainImageSources.add(img); } //껍데기 생성 @NonNull @Override public ImageMainAdapter.MainImageHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater inflater=LayoutInflater.from(parent.getContext()); View view=inflater.inflate(R.layout.content,parent,false); return new MainImageHolder(view); } //데이터 바인딩 @Override public void onBindViewHolder(@NonNull ImageMainAdapter.MainImageHolder holder, int position) { int mainImage=mainImageSources.get(position); holder.setMainImgView(mainImage); } //크기 지정 @Override public int getItemCount() { return mainImageSources.size(); } public static class MainImageHolder extends RecyclerView.ViewHolder{ //규칙1 : 레이아웃 내부의 뷰 모두 변수화 private ImageView mainImgView; public MainImageHolder(@NonNull View itemView){ super(itemView); //규칙2 : id를 통해 뷰 찾기 mainImgView=itemView.findViewById(R.id.img_main); } //규칙3 : 함수를 통해 아이템 넣기 public void setMainImgView(int img){ mainImgView.setImageResource(img); } } }
package com.test.navermap; import android.Manifest; import android.content.Context; import android.os.Bundle; import android.view.View; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.naver.maps.geometry.LatLng; import com.naver.maps.map.CameraPosition; import com.naver.maps.map.LocationTrackingMode; import com.naver.maps.map.MapFragment; import com.naver.maps.map.NaverMap; import com.naver.maps.map.NaverMapOptions; import com.naver.maps.map.OnMapReadyCallback; import com.naver.maps.map.UiSettings; import com.naver.maps.map.overlay.InfoWindow; import com.naver.maps.map.overlay.Marker; import com.naver.maps.map.overlay.Overlay; import com.naver.maps.map.overlay.OverlayImage; import com.naver.maps.map.util.FusedLocationSource; import com.test.navermap.databinding.ActivityMainBinding; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { //뷰 private Context mContext=MainActivity.this; private RecyclerView rcMain; private ImageMainAdapter imageMainAdapter; //지도 private NaverMap naverMap; private FusedLocationSource locationSource; private static final int LOCATION_PERMISSION_REQUEST_CODE = 1000; private static final String[] PERMISSIONS = { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION }; private ActivityMainBinding binding; List<LatLng> lstLatLng = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(getLayoutInflater()); View view = binding.getRoot(); setContentView(view); //setContentView(R.layout.activity_main); locationSource = new FusedLocationSource(this,LOCATION_PERMISSION_REQUEST_CODE); CameraPosition cameraPosition = new CameraPosition( new LatLng(35.1798159, 129.070222), //대상 지점 16, //줌 레벨 20, //기울임 각도 0 //베어링 각도 ); NaverMapOptions options = new NaverMapOptions() .camera(cameraPosition) .mapType(NaverMap.MapType.Terrain) .enabledLayerGroups(NaverMap.LAYER_GROUP_BUILDING) .compassEnabled(true) .scaleBarEnabled(true) .locationButtonEnabled(true); FragmentManager fm = getSupportFragmentManager(); MapFragment mapFragment = (MapFragment) fm.findFragmentById(R.id.map); if (mapFragment == null) { mapFragment = MapFragment.newInstance(); fm.beginTransaction().add(R.id.map, mapFragment).commit(); } mapFragment.getMapAsync(this); //뷰 rcMain=findViewById(R.id.rc_mainProfile); imageMainAdapter=new ImageMainAdapter(); //이미지 넣기 imageMainAdapter.addMainImage(R.drawable.mego); imageMainAdapter.addMainImage(R.drawable.second_road); RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(mContext); rcMain.setLayoutManager(layoutManager); rcMain.setAdapter(imageMainAdapter); } @Override public void onMapReady(@NonNull NaverMap naverMap) { this.naverMap = naverMap; //naverMap.setLocationSource(locationSource); //현재위치 표시 //ActivityCompat.requestPermissions(this, PERMISSIONS, LOCATION_PERMISSION_REQUEST_CODE); //디폴트 위치 정하기(메리고라운드) CameraPosition cameraPosition = new CameraPosition( new LatLng(36.6186031684174, 127.290161851575), 16 ); naverMap.setCameraPosition(cameraPosition); //정보창 InfoWindow infoWindow = new InfoWindow(); infoWindow.setAdapter(new InfoWindow.DefaultTextAdapter(this) { @NonNull @Override public CharSequence getText(@NonNull InfoWindow infoWindow) { return "메리고라운드"; } }); //마커 표시 Marker marker1 = new Marker(); Marker marker2 = new Marker(); Marker marker3 = new Marker(); Marker marker4 = new Marker(); Marker marker5 = new Marker(); Marker marker6 = new Marker(); Marker marker7 = new Marker(); //메리고라운드 marker1.setPosition(new LatLng(36.6186031684174, 127.290161851575)); marker1.setCaptionText("메리고라운드"); marker1.setMap(naverMap); //세컨로드 marker2.setPosition(new LatLng(36.6184830998888, 127.289510234393)); marker2.setCaptionText("세컨로드"); marker2.setMap(naverMap); //원미 marker3.setPosition(new LatLng(36.6142536955248, 127.289846536649)); marker3.setCaptionText("원미"); marker3.setMap(naverMap); //흑룡강 marker4.setPosition(new LatLng(36.61772340913732, 127.28878077672847)); marker4.setCaptionText("흑룡강"); marker4.setMap(naverMap); //옛통이모 marker5.setPosition(new LatLng(36.618577878689955, 127.28851567105625)); marker5.setCaptionText("옛통이모"); marker5.setMap(naverMap); //서라벌가든 marker6.setPosition(new LatLng(36.61885647034628, 127.2906826192085)); marker6.setCaptionText("서라벌가든"); marker6.setMap(naverMap); //요프 marker7.setPosition(new LatLng(36.617074566435775, 127.2869254983756)); marker7.setCaptionText("요프"); marker7.setMap(naverMap); //마커 아이콘 marker1.setIcon(OverlayImage.fromResource(R.drawable.cafe_icon)); marker2.setIcon(OverlayImage.fromResource(R.drawable.cafe_icon)); marker7.setIcon(OverlayImage.fromResource(R.drawable.cafe_icon)); marker3.setIcon(OverlayImage.fromResource(R.drawable.res_icon)); marker4.setIcon(OverlayImage.fromResource(R.drawable.res_icon)); marker5.setIcon(OverlayImage.fromResource(R.drawable.res_icon)); marker6.setIcon(OverlayImage.fromResource(R.drawable.cafe_icon)); naverMap.setOnMapClickListener(naverMap.getOnMapClickListener()); //지도를 클릭하면 정보 창을 닫음 naverMap.setOnMapClickListener((coord,point)->{ infoWindow.close(); }); //마커를 클릭하면: Overlay.OnClickListener listener = overlay -> { Marker marker = (Marker)overlay; if (marker.getInfoWindow()==null){ //현재 마커에 정보 창이 열려있지 않을 경우 엶 infoWindow.open(marker); }else { //이미 현재 마커에 정보 창이 열려있을 경우 닫음 infoWindow.close(); } return true; }; marker1.setOnClickListener(listener); marker2.setOnClickListener(listener); marker3.setOnClickListener(listener); marker4.setOnClickListener(listener); marker5.setOnClickListener(listener); marker6.setOnClickListener(listener); marker7.setOnClickListener(listener); UiSettings uiSettings = naverMap.getUiSettings(); uiSettings.setLocationButtonEnabled(true); naverMap.setLocationTrackingMode(LocationTrackingMode.Follow); } }
참고 사이트 https://itstudy-mary.tistory.com/210?category=929375
애뮬레이터에서 지도를 열 때 내가 만든 뷰페이지가 나오지 않음 -> 아직 결합을 해주지 않아서인듯
xml파일에서 사진과 텍스트 배치와 사이즈 컬러 결정 등을 어느정도 이해는 했지만 정확히 알지는 못하는 상태.
content.xml
activity_main.xml
ImageMainAdapter.java
MainActivity.java