From f0b35f126fa62de4ed3eaa0e3af5ff9c06ab71b5 Mon Sep 17 00:00:00 2001 From: KIMMYSJ Date: Fri, 27 Apr 2018 19:02:09 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EB=AA=A9=EC=A0=81=EC=A7=80=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20ver2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/homin/test1/ItemDestination.java | 46 ++ .../com/example/homin/test1/MapsActivity.java | 699 +++++++++++------- .../homin/test1/PersonItemRenderer.java | 75 +- app/src/main/res/layout/activity_maps.xml | 16 + 4 files changed, 545 insertions(+), 291 deletions(-) create mode 100644 app/src/main/java/com/example/homin/test1/ItemDestination.java diff --git a/app/src/main/java/com/example/homin/test1/ItemDestination.java b/app/src/main/java/com/example/homin/test1/ItemDestination.java new file mode 100644 index 0000000..87ae6eb --- /dev/null +++ b/app/src/main/java/com/example/homin/test1/ItemDestination.java @@ -0,0 +1,46 @@ +package com.example.homin.test1; + +import com.google.android.gms.maps.model.LatLng; +import com.google.maps.android.clustering.ClusterItem; + +public class ItemDestination implements ClusterItem { + + + + private LatLng mPosition; + private String title; + private String snippet; + + + public ItemDestination(){} + public ItemDestination(LatLng mPosition,String title, String snippet) { + this.mPosition = mPosition; + this.title = title; + this.snippet = snippet; + + } + + + public void setTitle(String title) { + this.title = title; + } + + public void setSnippet(String snippet) { + this.snippet = snippet; + } + + @Override + public LatLng getPosition() { + return mPosition; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public String getSnippet() { + return snippet; + } +} diff --git a/app/src/main/java/com/example/homin/test1/MapsActivity.java b/app/src/main/java/com/example/homin/test1/MapsActivity.java index e171943..24a25da 100644 --- a/app/src/main/java/com/example/homin/test1/MapsActivity.java +++ b/app/src/main/java/com/example/homin/test1/MapsActivity.java @@ -25,6 +25,7 @@ import android.support.design.widget.BottomNavigationView; import android.support.design.widget.BottomSheetBehavior; import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.support.v4.app.FragmentManager; @@ -72,6 +73,7 @@ import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.storage.StorageReference; +import com.google.maps.android.SphericalUtil; import com.google.maps.android.clustering.Cluster; import com.google.maps.android.clustering.ClusterItem; import com.google.maps.android.clustering.ClusterManager; @@ -89,9 +91,16 @@ import static com.example.homin.test1.WriteActivity.*; import static com.example.homin.test1.ReadMemoActivity.*; + + + + public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.OnConnectionFailedListener, MypageFragment.EssaySetlectedCallback { + private boolean destinationClicked = false; + + @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { @@ -137,12 +146,11 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { private boolean checkLocation; private boolean destoryCheck; - // MyPage에 이용 private static final int CAMERA_CODE = 1000; private static final int GALLERY_CODE = 1001; private static final int CROP_IMAGE_CODE = 1002; -// private Uri filePath; + // private Uri filePath; private Uri photoUri, albumUri; private Uri selectedUri; Boolean albumPick = false; @@ -158,10 +166,16 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { private AutoCompleteTextView mSearchText;//검색창 뷰 private PlaceAutoCompleteAdapter placeAutoCompleteAdapter; private GoogleApiClient mGoogleApiClient; - // private GeoDataClient geoDataClient; private PlaceInfo mPlace; // 자동검색창 각 리스트아이템 대한 정보 - private Marker mMarker; //목적지 마커 + + //목적지 설정 + private Marker mMarker; //목적지 마커(롱클릭시) private static final LatLngBounds LAT_LNG_BOUNDS = new LatLngBounds(new LatLng(-40, -168), new LatLng(71, 136));//지구전체 범위 + private View rootView; + private TextView distanceIndicator; //거리표현하는 TextView; + private ItemDestination targetMarker;//목적지 마커(검색시) + private String targetId; //상대방을 목적지로 선택했을때 + private ItemPerson targetIdMarker; private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @@ -202,6 +216,7 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); + rootView = findViewById(R.id.container);//Snackbar위한 View member변수 Intent intent = new Intent(this, ClosingServics.class); startService(intent); context = getApplicationContext(); @@ -209,6 +224,7 @@ protected void onCreate(Bundle savedInstanceState) { memoList = new ArrayList<>(); myFriendContactList = new ArrayList<>(); personList = new HashMap<>(); + distanceIndicator = findViewById(R.id.distanceIndicator); pictureList = DaoImple.getInstance().getPictureList(); @@ -268,9 +284,42 @@ public void onSlide(@NonNull View bottomSheet, float slideOffset) { } }); +// chatToastMessage(); + } +// private void chatToastMessage() { +// reference.child("Chat").addChildEventListener(new ChildEventListener() { +// @Override +// public void onChildAdded(DataSnapshot dataSnapshot, String s) { +// Chat c = dataSnapshot.getValue(Chat.class); +// +// +// } +// +// @Override +// public void onChildChanged(DataSnapshot dataSnapshot, String s) { +// +// } +// +// @Override +// public void onChildRemoved(DataSnapshot dataSnapshot) { +// +// } +// +// @Override +// public void onChildMoved(DataSnapshot dataSnapshot, String s) { +// +// } +// +// @Override +// public void onCancelled(DatabaseError databaseError) { +// +// } +// }); +// } + /********************************검색창을 위한 메소드들****************************************/ //목적지 설정후 목적지로 카메라 돌리기 @@ -289,20 +338,19 @@ private void moveCamera(LatLng latLng, float zoom, PlaceInfo placeInfo) { mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, zoom)); - mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter(MapsActivity.this)); - mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { - @Override - public boolean onMarkerClick(Marker marker) { - if (marker == mMarker) { - if (mMarker.isInfoWindowShown()) { - mMarker.hideInfoWindow(); - } else { - mMarker.showInfoWindow(); - } - } - return false; - } - }); +// mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { +// @Override +// public boolean onMarkerClick(Marker marker) { +// if (marker == mMarker) { +// if (mMarker.isInfoWindowShown()) { +// mMarker.hideInfoWindow(); +// } else { +// mMarker.showInfoWindow(); +// } +// } +// return false; +// } +// }); if (placeInfo != null) { try { @@ -312,7 +360,29 @@ public boolean onMarkerClick(Marker marker) { "별점: " + placeInfo.getRating() + "\n"; MarkerOptions options = new MarkerOptions().position(latLng).title(placeInfo.getName()).snippet(snippet); - mMarker = mMap.addMarker(options); + if (mMarker != null) { + mMarker.remove(); + } + + if (targetMarker != null) { + clusterManager.removeItem(targetMarker); + } + targetMarker = new ItemDestination(latLng, placeInfo.getName(), snippet); + clusterManager.addItem(targetMarker); + clusterManager.cluster(); + +// Collection collection = clusterManager.getMarkerCollection().getMarkers(); +// +// for(Marker x: collection){ +// Log.i("KSJ", "if문 들어옴111111"); +// Log.i("KSJ","x:" + x.getTitle() +"\n" + "targetMarker: " + targetMarker.getTitle()); +// if((Integer)x.getTag() == 3){ +// Log.i("KSJ", "if문 들어옴222222"); +// +// mMarker = x; +// Toast.makeText(context, x.getTitle(), Toast.LENGTH_SHORT).show(); +// } +// } } catch (NullPointerException e) { Log.e("bye", "moveCamera: " + e.getMessage()); } @@ -321,7 +391,6 @@ public boolean onMarkerClick(Marker marker) { } - hideSoftKeyboard(); } @@ -443,28 +512,126 @@ public void onMapReady(final GoogleMap googleMap) { init(); email = DaoImple.getInstance().getLoginEmail(); mMap = googleMap; + mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter(MapsActivity.this)); reference = FirebaseDatabase.getInstance().getReference(); -// if(memoManager == null){ -// memoManager = new ClusterManager(MapsActivity.this, mMap); -// mMap.setOnCameraIdleListener(memoManager); -// memoManager.setRenderer(new PersonItemRenderer(MapsActivity.this,mMap,memoManager)); -// memoManager.setAlgorithm(new CustomAlgorithm()); -// -// } - if (clusterManager == null) { clusterManager = new ClusterManager<>(MapsActivity.this, mMap); clusterManager.setRenderer(new PersonItemRenderer(MapsActivity.this, mMap, clusterManager)); clusterManager.setAlgorithm(new CustomAlgorithm()); mMap.setOnCameraIdleListener(clusterManager); mMap.setOnMarkerClickListener(clusterManager); + mMap.setOnInfoWindowClickListener(clusterManager); } + //InfoWindowClickListener for ClusterItems + clusterManager.setOnClusterItemInfoWindowClickListener(new ClusterManager.OnClusterItemInfoWindowClickListener() { + @Override + public void onClusterItemInfoWindowClick(final ClusterItem clusterItem) { + + if (clusterItem instanceof ItemDestination) { + + if (clusterItem.equals(targetMarker)) { + + Snackbar.make(rootView, "목적지로 설정하시겠습니까?", 5000).setAction("네", new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mMarker != null) { + mMarker.remove(); + mMarker = null; + } + + destinationClicked = true; + setDestination(); + } + }).show(); + + } + } else if (clusterItem instanceof ItemMemo) { + + Snackbar.make(rootView, "전체내용을 보시겠습니까?", 5000).setAction("네", new View.OnClickListener() { + @Override + public void onClick(View v) { + + Intent intent = new Intent(MapsActivity.this, ReadMemoActivity.class); + intent.putExtra(MEMO_NAME, ((ItemMemo) clusterItem).getUserName()); + intent.putExtra(MEMO_ID, ((ItemMemo) clusterItem).getUserId()); + intent.putExtra(MEMO_TITLE, ((ItemMemo) clusterItem).getTitle()); + intent.putExtra(MEMO_CONTENT, ((ItemMemo) clusterItem).getContent()); + intent.putExtra(MEMO_URL, ((ItemMemo) clusterItem).getImageUrl()); + intent.putExtra(MEMO_TIME, ((ItemMemo) clusterItem).getTime()); + startActivity(intent); + + } + }).show(); + + + } else if (clusterItem instanceof ItemPerson) { + final String id = ((ItemPerson) clusterItem).getUserId(); + Toast.makeText(context, "사람 들어옴", Toast.LENGTH_SHORT).show(); + Snackbar.make(rootView, "목적지로 설정하시겠습니까?", 5000).setAction("네", new View.OnClickListener() { + @Override + public void onClick(View v) { +// final String key = DaoImple.getInstance().getFirebaseKey(id); +// reference.child("contact").child(key).addChildEventListener(new ChildEventListener() { +// @Override +// public void onChildAdded(DataSnapshot dataSnapshot, String s) { +// dataSnapshot.child("contact").child(key).getValue() +// } +// +// @Override +// public void onChildChanged(DataSnapshot dataSnapshot, String s) { +// +// } +// +// @Override +// public void onChildRemoved(DataSnapshot dataSnapshot) { +// +// } +// +// @Override +// public void onChildMoved(DataSnapshot dataSnapshot, String s) { +// +// } +// +// @Override +// public void onCancelled(DatabaseError databaseError) { +// +// } +// }) + distanceIndicator.setText("위치 확인중"); + if (mMarker != null) { + mMarker.remove(); + mMarker = null; + } + + + destinationClicked = false; + + if (targetMarker != null) { + clusterManager.removeItem(targetMarker); + clusterManager.cluster(); + targetMarker = null; + } + if (mMarker != null) { + mMarker.remove(); + } + + destinationClicked = false; + targetId = ((ItemPerson) clusterItem).getUserId(); + setDestination(); + } + }).show(); + + } + } + }); + + clusterManager.setOnClusterClickListener(new ClusterManager.OnClusterClickListener() { @Override public boolean onClusterClick(Cluster cluster) { @@ -496,32 +663,6 @@ public boolean onClusterClick(Cluster cluster) { } - - - - return true; - } - }); - - // 사람이나 메모 클릭시, 메모 마커는 메모 상세보기, 사람마커는 아직 미설정 - clusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener() { - @Override - public boolean onClusterItemClick(ClusterItem clusterItem) { - if (clusterItem instanceof ItemMemo) { - Toast.makeText(context, "메모 클릭", Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(MapsActivity.this, ReadMemoActivity.class); - intent.putExtra(MEMO_NAME, ((ItemMemo) clusterItem).getUserName()); - intent.putExtra(MEMO_ID, ((ItemMemo) clusterItem).getUserId()); - intent.putExtra(MEMO_TITLE, ((ItemMemo) clusterItem).getTitle()); - intent.putExtra(MEMO_CONTENT, ((ItemMemo) clusterItem).getContent()); - intent.putExtra(MEMO_URL, ((ItemMemo) clusterItem).getImageUrl()); - intent.putExtra(MEMO_TIME, ((ItemMemo) clusterItem).getTime()); - startActivity(intent); - - } else { - - Toast.makeText(context, "사람 클릭", Toast.LENGTH_SHORT).show(); - } return true; } }); @@ -537,10 +678,6 @@ public boolean onClusterItemClick(ClusterItem clusterItem) { Log.i("fffff", "체인지 끝남3"); - - - - // 친구 요청 Activity 실행 actionButton.setOnClickListener(new View.OnClickListener() { @Override @@ -554,8 +691,27 @@ public void onClick(View v) { mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { @Override - public void onMapLongClick(LatLng latLng) { - openContextMenu(findViewById(R.id.map)); + public void onMapLongClick(final LatLng latLng) { + + Snackbar.make(rootView, "목적지로 설정하시겠습니까?", 5000).setAction("네", new View.OnClickListener() { + @Override + public void onClick(View v) { + distanceIndicator.setText(""); + destinationClicked = true; + MarkerOptions options = new MarkerOptions().position(latLng).title("목적지").snippet("위도:" + latLng.latitude + "/n" + "경도: " + latLng.longitude); + if (mMarker != null) { + mMarker.remove(); + } + + if (targetMarker != null) { + clusterManager.removeItem(targetMarker); + clusterManager.cluster(); + } + mMarker = mMap.addMarker(options); + setDestination(); + + } + }).show(); } }); @@ -566,39 +722,49 @@ public void onMapLongClick(LatLng latLng) { public void onChildAdded(DataSnapshot dataSnapshot, String s) { if (myFriendList != null) { Contact contact = dataSnapshot.getValue(Contact.class); - if(contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())){ + if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { myContact = contact; DaoImple.getInstance().setContact(myContact); } - for(int a = 0 ; a < myFriendList.size() ; a++){ + for (int a = 0; a < myFriendList.size(); a++) { // 친구들 위치정보 받아와서 구글맵에 갱신 - if(myFriendList.get(a).equals(contact.getUserId())) { + if (myFriendList.get(a).equals(contact.getUserId())) { // 로그인 되어있는 상태라면 사용자 마커 표시 - List friendLocation = contact.getUserLocation(); - if (contact.getResizePictureUrl() != null) { - ItemPerson friendMarker = new ItemPerson(friendLocation.get(0), - friendLocation.get(1), contact.getUserId(), contact.getUserName(),contact.getResizePictureUrl()); - if (contact.isLoginCheck()) { - clusterManager.addItem(friendMarker); - } - // 내 마커는 목적지 설정을 위해 멤버 변수에 저장 - if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { - myMarker = friendMarker; - } - personList.put(contact.getUserId(), friendMarker); - clusterManager.cluster(); + List friendLocation = contact.getUserLocation(); + if (contact.getResizePictureUrl() != null) { + ItemPerson friendMarker = new ItemPerson(friendLocation.get(0), + friendLocation.get(1), contact.getUserId(), contact.getUserName(), contact.getResizePictureUrl()); + if (contact.isLoginCheck()) { + clusterManager.addItem(friendMarker); + } + // 내 마커는 목적지 설정을 위해 멤버 변수에 저장 + if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { + myMarker = friendMarker; + } + personList.put(contact.getUserId(), friendMarker); + clusterManager.cluster(); // - } else { - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inSampleSize = 1; - Bitmap otherPicture = BitmapFactory.decodeResource(getResources(), R.drawable.what, options); - Bitmap picture = Bitmap.createScaledBitmap(otherPicture, 128, 128, true); - ItemPerson friendMarker = new ItemPerson(friendLocation.get(0), - friendLocation.get(1), contact.getUserId(), contact.getUserName(),contact.getResizePictureUrl()); - // 내 마커는 목적지 설정을 위해 멤버 변수에 저장 - if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { - myMarker = friendMarker; + } else { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize = 1; + Bitmap otherPicture = BitmapFactory.decodeResource(getResources(), R.drawable.what, options); + Bitmap picture = Bitmap.createScaledBitmap(otherPicture, 128, 128, true); + ItemPerson friendMarker = new ItemPerson(friendLocation.get(0), + friendLocation.get(1), contact.getUserId(), contact.getUserName(), contact.getResizePictureUrl()); + // 내 마커는 목적지 설정을 위해 멤버 변수에 저장 + if (targetId != null) { + if (contact.getUserId().equals(targetId)) { + targetIdMarker = friendMarker; + } + } + if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { + myMarker = friendMarker; + if (destinationClicked) { + setDestination(); + } + if (targetId != null) { + setDestination(); } if (contact.isLoginCheck()) { clusterManager.addItem(friendMarker); @@ -607,29 +773,32 @@ public void onChildAdded(DataSnapshot dataSnapshot, String s) { personList.put(contact.getUserId(), friendMarker); clusterManager.cluster(); // + } + } } - } } } - // 친구 위치 바뀌었을때 정보 갱신 + + // 친구 위치 바뀌었을때 정보 갱신 @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { check = false; - Log.i("fffff","체인지 들어옴"); + Log.i("fffff", "체인지 들어옴"); reference.child("Contact").addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { Contact contact = dataSnapshot.getValue(Contact.class); - if(contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())){ + if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { myContact = contact; + DaoImple.getInstance().setContact(contact); } - if(myFriendList != null){ - for(int a = 0 ; a < myFriendList.size() ; a++){ - if(myFriendList.get(a).equals(contact.getUserId())) { + if (myFriendList != null) { + for (int a = 0; a < myFriendList.size(); a++) { + if (myFriendList.get(a).equals(contact.getUserId())) { // 로그인 되있는 상태라면 사용자 마커 표시 if (contact.isLoginCheck()) { Log.i("asdasd", "로그인 됨 : " + contact.getUserId()); @@ -638,17 +807,17 @@ public void onChildAdded(DataSnapshot dataSnapshot, String s) { // 저장 된 이름 정보와 firebase에 저장 된 이름 비교 for (int b = 0; b < personList.size(); b++) { ClusterItem m = personList.get(contact.getUserId()); - for(int aa = 0 ; aa < myFriendList.size() ; aa++) { + for (int aa = 0; aa < myFriendList.size(); aa++) { Log.i("asdqwe", "체인지 친구목록 : " + myFriendList.get(aa)); } if (m instanceof ItemPerson || m == null) { - if(m == null){ + if (m == null) { List friendLocation = contact.getUserLocation(); - if (pictureList.get(contact.getUserId()) != null) { + if (contact.getResizePictureUrl() != null) { Bitmap picture = pictureList.get(contact.getUserId()); ItemPerson friendMarker = new ItemPerson(friendLocation.get(0), - friendLocation.get(1), contact.getUserId(), contact.getUserName(),contact.getResizePictureUrl()); + friendLocation.get(1), contact.getUserId(), contact.getUserName(), contact.getResizePictureUrl()); Log.i("fffff", "체인지 : 바뀐위치 저장"); clusterManager.addItem(friendMarker); @@ -673,7 +842,7 @@ public void onChildAdded(DataSnapshot dataSnapshot, String s) { Log.i("fffff", "체인지 else : " + contact.getUserId()); } - }else { + } else { Log.i("asdqwe", "사람임"); Log.i("asdqwe", "0 " + contact.getUserId()); if (((ItemPerson) m).getUserId().equals(contact.getUserId())) { @@ -681,8 +850,18 @@ public void onChildAdded(DataSnapshot dataSnapshot, String s) { Log.i("asdqwe", "1 " + contact.getUserId()); // 저장 되있는 Location 정보와 firebase에 저장된 Location 비교 LatLng saveLatLng = ip.getPosition(); + if (targetId != null) { + if (contact.getUserId().equals(targetId)) { + targetIdMarker = ip; + setDestination(); + } + } + if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { myMarker = ip; + if (destinationClicked) { + setDestination(); + } } Log.i("fffff", "리스트 크기 : " + personList.size()); Log.i("fffff", "저장 : " + ip.getUserName()); @@ -738,19 +917,19 @@ public void onChildAdded(DataSnapshot dataSnapshot, String s) { } } - }else{ + } else { Collection markers = clusterManager.getAlgorithm().getItems(); - for(ClusterItem m : markers){ - if(m instanceof ItemPerson){ - if(((ItemPerson)m).getUserId().equals(contact.getUserId())){ - ItemPerson ip = personList.get(contact.getUserId()); - clusterManager.removeItem(ip); + for (ClusterItem m : markers) { + if (m instanceof ItemPerson) { + if (((ItemPerson) m).getUserId().equals(contact.getUserId())) { + ItemPerson ip = personList.get(contact.getUserId()); + clusterManager.removeItem(ip); - } + } } } } - } + } } clusterManager.cluster(); @@ -796,11 +975,10 @@ public void onCancelled(DatabaseError databaseError) { } }); - Log.i("fffff","체인지 끝남"); + Log.i("fffff", "체인지 끝남"); } - // 내 친구 리스트 받아오고 친구 메모 가져오기 private void getFriendList() { contactList = new ArrayList<>(); @@ -809,22 +987,22 @@ private void getFriendList() { public void onChildAdded(DataSnapshot dataSnapshot, String s) { Contact contact = dataSnapshot.getValue(Contact.class); contactList.add(contact); - if(contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())){ + if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { myContact = contact; List lastLocation = contact.getUserLocation(); - LatLng latLng = new LatLng(lastLocation.get(0),lastLocation.get(1)); + LatLng latLng = new LatLng(lastLocation.get(0), lastLocation.get(1)); myLatLng = latLng; } - if(contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())){ - if(contact.getFriendList() != null) { + if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { + if (contact.getFriendList() != null) { myFriendList = contact.getFriendList(); // 친구 목록 저장 memoFriendList = contact.getFriendList(); memoFriendList.add(DaoImple.getInstance().getLoginEmail()); - Log.i("fffff","친구 목록 저장"); + Log.i("fffff", "친구 목록 저장"); - Log.i("fffff","친구 메모 삭제"); - for(int a = 0 ; a < memoFriendList.size() ; a++){ // 친구 목록으로 메모 가져오기 - Log.i("fffff","메모 반복문 들어옴"); + Log.i("fffff", "친구 메모 삭제"); + for (int a = 0; a < memoFriendList.size(); a++) { // 친구 목록으로 메모 가져오기 + Log.i("fffff", "메모 반복문 들어옴"); String key = DaoImple.getInstance().getFirebaseKey(memoFriendList.get(a)); friendMemeList(key); // 친구들 메모 가져오는 메소드 } @@ -840,25 +1018,25 @@ public void onChildChanged(DataSnapshot dataSnapshot, String s) { Contact contact = dataSnapshot.getValue(Contact.class); contactList.clear(); contactList.add(contact); - if(contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())){ - if(contact.getFriendList() != null) { + if (contact.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { + if (contact.getFriendList() != null) { DaoImple.getInstance().setContact(contact); List fflist = contact.getFriendList(); // 친구 목록 저장 myFriendList = new ArrayList<>(); - for(int a = 0 ; a < fflist.size() ; a++){ + for (int a = 0; a < fflist.size(); a++) { String name = fflist.get(a); myFriendList.add(name); } myFriendList.add(DaoImple.getInstance().getLoginEmail()); - Log.i("zxc","메모 체인지"); + Log.i("zxc", "메모 체인지"); clusterManager.clearItems(); - for(int a = 0 ; a < myFriendList.size() ; a++) { // 친구 목록으로 메모 가져오기 + for (int a = 0; a < myFriendList.size(); a++) { // 친구 목록으로 메모 가져오기 Log.i("fffff", "메모 반복문 들어옴 체인지"); String key = DaoImple.getInstance().getFirebaseKey(myFriendList.get(a)); friendMemeList(key); // 친구들 메모 가져오는 메소드 } - } + } } } @@ -891,9 +1069,9 @@ public void onChildAdded(DataSnapshot dataSnapshot, String s) { Log.i("fffff", "들어옴"); UserDataTable data = dataSnapshot.getValue(UserDataTable.class); List friendLocation = data.getLocation(); - ItemMemo friendMemo = new ItemMemo(friendLocation.get(0),friendLocation.get(1), - data.getUserId(),data.getName(),data.getTitle(),data.getContent(), - data.getData(),data.getImageUrl(),BitmapFactory.decodeResource(context.getResources(),R.drawable.letter)); + ItemMemo friendMemo = new ItemMemo(friendLocation.get(0), friendLocation.get(1), + data.getUserId(), data.getName(), data.getTitle(), data.getContent(), + data.getData(), data.getImageUrl(), BitmapFactory.decodeResource(context.getResources(), R.drawable.letter)); memoList.add(friendMemo); // 메모의 거리를 계산 해주는 메소드 memoDistanceAdd(friendMemo); @@ -926,40 +1104,40 @@ public void onCancelled(DatabaseError databaseError) { // 메모와의 거리를 계산해주는 메소드 private void memoDistanceAdd(ItemMemo friendMemo) { - Location myMemoLocation = new Location("my"); - myMemoLocation.setLatitude(myLatLng.latitude); - myMemoLocation.setLatitude(myLatLng.longitude); - Location yourMemoLocation = new Location("your"); - yourMemoLocation.setLatitude(friendMemo.getPosition().latitude); - yourMemoLocation.setLatitude(friendMemo.getPosition().longitude); + Location myMemoLocation = new Location("my"); + myMemoLocation.setLatitude(myLatLng.latitude); + myMemoLocation.setLatitude(myLatLng.longitude); + Location yourMemoLocation = new Location("your"); + yourMemoLocation.setLatitude(friendMemo.getPosition().latitude); + yourMemoLocation.setLatitude(friendMemo.getPosition().longitude); // 나와 메모의 거리가 300m 미만이라면 메모 add - float distance = yourMemoLocation.distanceTo(myMemoLocation); - Log.i("fffff11", "myLocation : " + myLatLng.latitude + " " +myLatLng.longitude); - Log.i("fffff11", "distance : " + distance); - if(distance < 300) { - clusterManager.addItem(friendMemo); + float distance = yourMemoLocation.distanceTo(myMemoLocation); + Log.i("fffff11", "myLocation : " + myLatLng.latitude + " " + myLatLng.longitude); + Log.i("fffff11", "distance : " + distance); + if (distance < 300) { + clusterManager.addItem(friendMemo); // Log.i("fffff", data.getTitle()); - Log.i("fffff", "친구 메모 에드"); - } + Log.i("fffff", "친구 메모 에드"); + } // } // 내 gps 위치 받아오고, firebase에 contact 업데이트 @SuppressLint("MissingPermission") private void myLocationUpdate() { - Log.i("asd123","myLocationUpdate"); + Log.i("asd123", "myLocationUpdate"); if (locationManager == null) { locationManager = (LocationManager) this.getSystemService(context.LOCATION_SERVICE); - Log.i("vvv456","로케이션 매니저 생성"); + Log.i("vvv456", "로케이션 매니저 생성"); } - Log.i("",""); + Log.i("", ""); // 최적 gps 하드웨어 검색 Criteria c = new Criteria(); - provider = locationManager.getBestProvider(c,true); + provider = locationManager.getBestProvider(c, true); // 사용가능한 장치가 없다면 모든 장치에서 검색 - if(provider == null || !locationManager.isProviderEnabled(provider)) { + if (provider == null || !locationManager.isProviderEnabled(provider)) { List hardWare = locationManager.getAllProviders(); for (int a = 0; a < hardWare.size(); a++) { String gpsHardware = hardWare.get(a); @@ -971,128 +1149,76 @@ private void myLocationUpdate() { } - // 내 GPS 위치가 바뀔 때 마다, 내 마커 생성 - locationListener = new LocationListener() { - @Override - public void onLocationChanged(Location location) { - check = false; - memoCheck = false; - - List myLocation = new ArrayList<>(); - myLocation.add(location.getLatitude()); - myLocation.add(location.getLongitude()); - myContact.setUserLocation(myLocation); - reference.child("Contact").child(DaoImple.getInstance().getKey()).setValue(myContact); - - // 내 위치를 myLatLng로 생성 - myLatLng = new LatLng(location.getLatitude(),location.getLongitude()); - - if(!zoomCheck) { - mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myLatLng, cameraZoom)); - zoomCheck = true; - clusterManager.cluster(); - } - - clusterManager.clearItems(); - Log.i("fffff","메모 삭제"); - if(memoList != null) { - - for (int a = 0; a < memoList.size(); a++) { - memoDistanceAdd(memoList.get(a)); - } - } - - - + // 내 GPS 위치가 바뀔 때 마다, 내 마커 생성 + locationListener = new LocationListener() { + @Override + public void onLocationChanged(Location location) { + check = false; + memoCheck = false; + + List myLocation = new ArrayList<>(); + myLocation.add(location.getLatitude()); + myLocation.add(location.getLongitude()); + myContact = DaoImple.getInstance().getContact(); + myContact.setUserLocation(myLocation); + reference.child("Contact").child(DaoImple.getInstance().getKey()).setValue(myContact); + + // 내 위치를 myLatLng로 생성 + myLatLng = new LatLng(location.getLatitude(), location.getLongitude()); + + if (!zoomCheck) { + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(myLatLng, cameraZoom)); + zoomCheck = true; + clusterManager.cluster(); } - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { + clusterManager.clearItems(); + Log.i("fffff", "메모 삭제"); + if (memoList != null) { + for (int a = 0; a < memoList.size(); a++) { + memoDistanceAdd(memoList.get(a)); + } } - @Override - public void onProviderEnabled(String provider) { - } + } - @Override - public void onProviderDisabled(String provider) { + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { - } - }; - locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 100000, 100, locationListener); - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100000, 100, locationListener); + } + @Override + public void onProviderEnabled(String provider) { + } - } + @Override + public void onProviderDisabled(String provider) { + } + }; + locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 100, locationListener); + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 100, locationListener); - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - menu.add(0, 1, 0, "글 남기기"); - menu.add(0, 2, 0, "목적지로 설정하기"); - menu.add(0, 3, 0, "취소"); - super.onCreateContextMenu(menu, v, menuInfo); } - @Override - public boolean onContextItemSelected(MenuItem item) { - switch (item.getItemId()) { - case 1: - writeMyLocation(); - Intent intent = new Intent(MapsActivity.this,WriteActivity.class); - startActivityForResult(intent,RESULT_CODE); - break; - case 2: - break; - case 3: - closeContextMenu(); - break; - } - return super.onContextItemSelected(item); - } - -// // 갤러리에서 사진 선택하는 메소드 -// public void clickedProImgBotton() { -// Intent intent = new Intent(Intent.ACTION_PICK); -// //TODO: ACTION_PICK(이미지가 저장되어있는 폴더를 선택) ACTION_GET_CONTENT(전체 이미지를 폴더 구분없이 최신 이미지 순)랑 둘 비교 -// intent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); -// intent.setType("image/*"); -// startActivityForResult(intent, GALLERY_CODE); -// Log.i(TAG, "갤러리 코드: " + intent); -// } // end clickedProImgBotton() -// -// -// // 팝업뜰때 카메라 눌렀을때 발생하는 메소드 속에 내부메소드! -// public void popupCameraInCameraMethod() { -// Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); -// if (intent.resolveActivity(getPackageManager()) != null) { -// Log.i(TAG, "intent.getData(): " + intent.getData()); -// startActivityForResult(intent, CAMERA_CODE); -// -// Log.i(TAG, "팝업창에서 카메라 눌른후"); -// } -// } - - - @SuppressLint("MissingPermission") - void writeMyLocation(){ + void writeMyLocation() { // 현재 내 위치 가져오기 reference.child("Contact").addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { - for(DataSnapshot data : dataSnapshot.getChildren()){ + for (DataSnapshot data : dataSnapshot.getChildren()) { } Contact con = dataSnapshot.getValue(Contact.class); - if(con.getUserId().equals(DaoImple.getInstance().getLoginEmail())){ + if (con.getUserId().equals(DaoImple.getInstance().getLoginEmail())) { List location = con.getUserLocation(); - LatLng myLL = new LatLng(location.get(0),location.get(1)); + LatLng myLL = new LatLng(location.get(0), location.get(1)); DaoImple.getInstance().setWriteLocation(myLL); } } @@ -1122,6 +1248,7 @@ public void onCancelled(DatabaseError databaseError) { } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -1131,29 +1258,29 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.i(TAG, "RESULT_OK"); switch (requestCode) { case RESULT_CODE: - Log.i("ggv","onActivityResult"); + Log.i("ggv", "onActivityResult"); String title = data.getStringExtra(TITLE_KEY); String body = data.getStringExtra(BODY_KEY); String time = data.getStringExtra(TIME_KEY); String imageUrl = data.getStringExtra(IMAGEURL_KEY); - Log.i("ggv","onActivityResult 데이터 뺌"); + Log.i("ggv", "onActivityResult 데이터 뺌"); Log.i("gg", title + body); if (!(title.equals("")) && !(body.equals(""))) { // 클러스터 매니저에 메모 에드 LatLng memoLocation = DaoImple.getInstance().getWriteLocation(); - ItemMemo myMemo = new ItemMemo(memoLocation.latitude,memoLocation.longitude, - DaoImple.getInstance().getLoginEmail(),DaoImple.getInstance().getLoginId(),title,body, - time,imageUrl,BitmapFactory.decodeResource(context.getResources(),R.drawable.letter)); + ItemMemo myMemo = new ItemMemo(memoLocation.latitude, memoLocation.longitude, + DaoImple.getInstance().getLoginEmail(), DaoImple.getInstance().getLoginId(), title, body, + time, imageUrl, BitmapFactory.decodeResource(context.getResources(), R.drawable.letter)); - Log.i("bb","onActivityResult 내 메모 add"); + Log.i("bb", "onActivityResult 내 메모 add"); // 파이어베이스에 메모 업로드 List tableLocation = new ArrayList<>(); tableLocation.add(memoLocation.latitude); tableLocation.add(memoLocation.longitude); - UserDataTable table = new UserDataTable(DaoImple.getInstance().getLoginEmail(),DaoImple.getInstance().getLoginId() - ,imageUrl,tableLocation,title,body,time); + UserDataTable table = new UserDataTable(DaoImple.getInstance().getLoginEmail(), DaoImple.getInstance().getLoginId() + , imageUrl, tableLocation, title, body, time); reference.child("userData").child(DaoImple.getInstance().getKey()).push().setValue(table); - Log.i("ggv","onActivityResult 파이어베이스 push()"); + Log.i("ggv", "onActivityResult 파이어베이스 push()"); } break; @@ -1222,7 +1349,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { //EssayDetaliActivity의 인덱스갑 가져오는것 @Override public void onessaySetlected(int position) { - Intent intent = EssayDetailActivity.newIntent(this,position); + Intent intent = EssayDetailActivity.newIntent(this, position); startActivity(intent); } @@ -1255,26 +1382,27 @@ public void onBackPressed() { } - @Override protected void onDestroy() { Contact asd = DaoImple.getInstance().getContact(); asd.setLoginCheck(false); - reference.child("Contact").child(DaoImple.getInstance().getKey()).setValue(asd); - locationManager.removeUpdates(locationListener); + reference.child("Contact").child(DaoImple.getInstance().getKey()).setValue(asd); + Log.i("ggqs","디스트로이 액티비티"); super.onDestroy(); + } + private Contact missLocation(Contact myContact) { List myLocation = myContact.getUserLocation(); double lat = myLocation.get(0); double lon = myLocation.get(1); - lat+=0.01; - lon+=0.01; + lat += 0.01; + lon += 0.01; myLocation.clear(); myLocation.add(lat); myLocation.add(lon); @@ -1360,5 +1488,68 @@ private void cropImage() { } // end cropImage() + private void setMarkerInfoListener() { + + + } + + + //클릭을 했으면 작동 백키를 눌렀으면 취소 + // 검색한 주소, 내가 임의로 설정한 위치, 내글에 대한 목적지 설정 + private void setDestination() { + + distanceIndicator.setVisibility(View.VISIBLE); +// Log.i("KSJ", myMarker.getPosition() + "||"+ mMarker.getPosition() + ""); + if (myMarker != null && mMarker != null) { + Log.i("KSJ", myMarker.getPosition() + "||" + mMarker.getPosition() + ""); + double distance = SphericalUtil.computeDistanceBetween(myMarker.getPosition(), mMarker.getPosition()); +// Location.distanceBetween(); + Log.i("KSJ", "distance: " + distance); + distanceIndicator.setText(distance + " M "); + if (distance < 100) { + distanceIndicator.setVisibility(View.GONE); + Toast.makeText(context, "도착하였습니다", Toast.LENGTH_SHORT).show(); + destinationClicked = false; + + mMarker.remove(); + + } + } else if (myMarker != null && targetMarker != null) { + Log.i("KSJ", myMarker.getPosition() + "||" + targetMarker.getPosition() + "target?"); + double distance = SphericalUtil.computeDistanceBetween(myMarker.getPosition(), targetMarker.getPosition()); +// Location.distanceBetween(); + Log.i("KSJ", "distance: " + distance); + distanceIndicator.setText(distance + " M "); + if (distance < 100) { + distanceIndicator.setVisibility(View.GONE); + distanceIndicator.setText(""); + Toast.makeText(context, "도착하였습니다", Toast.LENGTH_SHORT).show(); + destinationClicked = false; + + clusterManager.removeItem(targetMarker); + clusterManager.cluster(); + + } + + } else if (myMarker != null && targetId != null && targetIdMarker != null) { + double distance = SphericalUtil.computeDistanceBetween(myMarker.getPosition(), targetIdMarker.getPosition()); + String stringDistance = Double.toString(distance); + int index = stringDistance.indexOf('.'); + String m = stringDistance.substring(0,index); + Toast.makeText(context, index+"", Toast.LENGTH_SHORT).show(); + String cm = stringDistance.substring(index); + Log.i("KSJ", "distance: " + distance); + distanceIndicator.setText(m + " M " +cm + "CM" ); + if (distance < 100) { + distanceIndicator.setVisibility(View.GONE); + distanceIndicator.setText(""); + Toast.makeText(context, "도착하였습니다", Toast.LENGTH_SHORT).show(); + destinationClicked = false; + targetId = null; + targetIdMarker = null; + } + } + } + } diff --git a/app/src/main/java/com/example/homin/test1/PersonItemRenderer.java b/app/src/main/java/com/example/homin/test1/PersonItemRenderer.java index 53a40d2..3953802 100644 --- a/app/src/main/java/com/example/homin/test1/PersonItemRenderer.java +++ b/app/src/main/java/com/example/homin/test1/PersonItemRenderer.java @@ -39,7 +39,7 @@ import jp.wasabeef.glide.transformations.CropCircleTransformation; -public class PersonItemRenderer extends DefaultClusterRenderer { +public class PersonItemRenderer extends DefaultClusterRenderer { Context context; GoogleMap googleMap; boolean imageCheck; @@ -49,24 +49,21 @@ private static Activity getActivity(Context context) { return null; } if (context instanceof Activity) { - if(!((Activity) context).isFinishing()) - return (Activity) context; + if (!((Activity) context).isFinishing()) + return (Activity) context; } else if (context instanceof ContextWrapper) { return getActivity(((ContextWrapper) context).getBaseContext()); } return null; } - - - @Override protected void onClusterItemRendered(ClusterItem clusterItem, final Marker marker) { Context get = getActivity(context); - if(clusterItem instanceof ItemPerson) { - if(get != null) { + if (clusterItem instanceof ItemPerson) { + if (get != null) { Glide.with(get).load(((ItemPerson) clusterItem).getImage()).asBitmap().fitCenter().into(new SimpleTarget() { @Override @@ -80,13 +77,14 @@ public void onResourceReady(Bitmap resource, GlideAnimation glid imageCheck = true; super.onClusterItemRendered(clusterItem, marker); } - } - - + if (clusterItem instanceof ItemDestination) { + marker.setTag(3); + } + } public PersonItemRenderer(Context context, GoogleMap map, ClusterManager clusterManager) { @@ -100,30 +98,33 @@ public PersonItemRenderer(Context context, GoogleMap map, ClusterManager reqHeight || width > reqWidth) { - - final int halfHeight = height / 2; - final int halfWidth = width / 2; - - // Calculate the largest inSampleSize value that is a power of 2 and keeps both - // height and width larger than the requested height and width. - while ((halfHeight / inSampleSize) >= reqHeight - && (halfWidth / inSampleSize) >= reqWidth) { - inSampleSize *= 2; - } + BitmapFactory.Options options, int reqWidth, int reqHeight) { + // Raw height and width of image + final int height = options.outHeight; + final int width = options.outWidth; + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int halfHeight = height / 2; + final int halfWidth = width / 2; + + // Calculate the largest inSampleSize value that is a power of 2 and keeps both + // height and width larger than the requested height and width. + while ((halfHeight / inSampleSize) >= reqHeight + && (halfWidth / inSampleSize) >= reqWidth) { + inSampleSize *= 2; } - - return inSampleSize; } + return inSampleSize; + } + } diff --git a/app/src/main/res/layout/activity_maps.xml b/app/src/main/res/layout/activity_maps.xml index 57df083..e7374ec 100644 --- a/app/src/main/res/layout/activity_maps.xml +++ b/app/src/main/res/layout/activity_maps.xml @@ -86,6 +86,20 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.848" /> + + + + @@ -123,4 +137,6 @@ + + \ No newline at end of file From 5d60455b714abd72d1b6a3b3dabf8baaa6e4dc7e Mon Sep 17 00:00:00 2001 From: KIMMYSJ Date: Mon, 30 Apr 2018 18:19:39 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EB=AA=A9=EC=A0=81=EC=A7=80=20=ED=99=94?= =?UTF-8?q?=EC=82=B4=ED=91=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=B1=ED=82=A4=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20=EA=B2=80=EC=83=89=EC=8B=9C=20=EB=AA=A9?= =?UTF-8?q?=EC=A0=81=20=EC=88=98=EC=A0=95=ED=95=B4=EC=95=BC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../homin/test1/CustomInfoWindowAdapter.java | 19 +- .../com/example/homin/test1/ItemPerson.java | 13 + .../com/example/homin/test1/MapsActivity.java | 236 ++++++++---------- .../homin/test1/PersonItemRenderer.java | 10 +- app/src/main/res/drawable/arrow_final.png | Bin 0 -> 1356 bytes app/src/main/res/drawable/shapetwo.xml | 2 +- app/src/main/res/drawable/white_border.xml | 2 +- app/src/main/res/layout/activity_maps.xml | 29 +-- 8 files changed, 166 insertions(+), 145 deletions(-) create mode 100644 app/src/main/res/drawable/arrow_final.png diff --git a/app/src/main/java/com/example/homin/test1/CustomInfoWindowAdapter.java b/app/src/main/java/com/example/homin/test1/CustomInfoWindowAdapter.java index cdd08f0..f5a2ca6 100644 --- a/app/src/main/java/com/example/homin/test1/CustomInfoWindowAdapter.java +++ b/app/src/main/java/com/example/homin/test1/CustomInfoWindowAdapter.java @@ -1,6 +1,7 @@ package com.example.homin.test1; import android.content.Context; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; @@ -21,26 +22,40 @@ public CustomInfoWindowAdapter(Context context){ private void rendowWindowText(Marker marker, View view){ String title = marker.getTitle(); TextView tvTitle = (TextView) view.findViewById(R.id.title); - + if(title == null){ + return; + } if(!title.equals("")){ tvTitle.setText(title); } String snippet = marker.getSnippet(); TextView tvSnippet = (TextView)view.findViewById(R.id.snippet); - + if(snippet == null){ + return; + } if(!snippet.equals("")){ tvSnippet.setText(snippet); } } @Override public View getInfoWindow(Marker marker) { + if((DaoImple.getInstance().getContact().getUserId()).equals(marker.getTitle())){ + return null; + } + rendowWindowText(marker, mWindow); + return mWindow; } @Override public View getInfoContents(Marker marker) { + + if((DaoImple.getInstance().getContact().getUserId()).equals(marker.getTitle())){ + + return null; + } rendowWindowText(marker,mWindow); return mWindow; } diff --git a/app/src/main/java/com/example/homin/test1/ItemPerson.java b/app/src/main/java/com/example/homin/test1/ItemPerson.java index 4ea3961..5c781f9 100644 --- a/app/src/main/java/com/example/homin/test1/ItemPerson.java +++ b/app/src/main/java/com/example/homin/test1/ItemPerson.java @@ -24,6 +24,19 @@ public ItemPerson(double lat, double lng, String id,String name,String image) { } + public void setUserId(String userId) { + this.userId = userId; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public void setImage(String image) { + this.image = image; + } + + public String getTitle() { return userId; } diff --git a/app/src/main/java/com/example/homin/test1/MapsActivity.java b/app/src/main/java/com/example/homin/test1/MapsActivity.java index eed9e9f..7c78c65 100644 --- a/app/src/main/java/com/example/homin/test1/MapsActivity.java +++ b/app/src/main/java/com/example/homin/test1/MapsActivity.java @@ -43,6 +43,7 @@ import android.view.inputmethod.EditorInfo; import android.widget.AdapterView; import android.widget.AutoCompleteTextView; +import android.widget.Button; import android.widget.FrameLayout; import android.widget.ProgressBar; import android.widget.TextView; @@ -123,7 +124,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { private BottomSheetBehavior bottomSheetBehavior; private View bottomview; private Menu mMenu; - private FloatingActionButton actionButton; + private Button actionButton; private DatabaseReference reference; private List myFriendList; private List memoFriendList; @@ -182,7 +183,7 @@ public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { private ItemPerson targetIdMarker; private View shapeView; private FloatingActionButton writeMemoButton; - private GroundOverlay arrow; + private Marker arrow; private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @@ -254,8 +255,8 @@ public void onClick(View v) { public void onClick(View view) { writeMyLocation(); - Intent intent = new Intent(MapsActivity.this,WriteActivity.class); - startActivityForResult(intent,RESULT_CODE); + Intent intent = new Intent(MapsActivity.this, WriteActivity.class); + startActivityForResult(intent, RESULT_CODE); } }); @@ -265,7 +266,7 @@ public void onClick(View view) { mapFragment.getMapAsync(this); BottomNavigationView navigationView = findViewById(R.id.navigation); navigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); - actionButton = findViewById(R.id.floatingActionButton); + actionButton = findViewById(R.id.AddIndicator); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); @@ -493,7 +494,7 @@ public void onMapReady(final GoogleMap googleMap) { clusterManager.setRenderer(new PersonItemRenderer(com.example.homin.test1.MapsActivity.this, mMap, clusterManager)); clusterManager.setAlgorithm(new CustomAlgorithm()); mMap.setOnCameraIdleListener(clusterManager); - mMap.setOnMarkerClickListener(clusterManager); +// mMap.setOnMarkerClickListener(clusterManager); mMap.setOnInfoWindowClickListener(clusterManager); } @@ -548,33 +549,7 @@ public void onClick(View v) { Snackbar.make(rootView, "목적지로 설정하시겠습니까?", 5000).setAction("네", new View.OnClickListener() { @Override public void onClick(View v) { -// final String key = DaoImple.getInstance().getFirebaseKey(id); -// reference.child("contact").child(key).addChildEventListener(new ChildEventListener() { -// @Override -// public void onChildAdded(DataSnapshot dataSnapshot, String s) { -// dataSnapshot.child("contact").child(key).getValue() -// } -// -// @Override -// public void onChildChanged(DataSnapshot dataSnapshot, String s) { -// -// } -// -// @Override -// public void onChildRemoved(DataSnapshot dataSnapshot) { -// -// } -// -// @Override -// public void onChildMoved(DataSnapshot dataSnapshot, String s) { -// -// } -// -// @Override -// public void onCancelled(DatabaseError databaseError) { -// -// } -// }) + distanceIndicator.setText("위치 확인중"); if (mMarker != null) { mMarker.remove(); @@ -1417,11 +1392,12 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { case 400: boolean check = data.getBooleanExtra("check", false); - if (check) { - actionButton.setImageResource(R.drawable.ddww); - } else { - actionButton.setImageResource(R.drawable.ic_notifications_black_24dp); - } +// if (check) { +// actionButton.setImageResource(R.drawable.ddww); +// +// } else { +// actionButton.setImageResource(R.drawable.ic_notifications_black_24dp); +// } break; @@ -1429,25 +1405,25 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } // end if - if(requestCode == 5004 && resultCode==1){ - final LatLng latLng = (LatLng)data.getParcelableExtra("LatLng"); + if (requestCode == 5004 && resultCode == 1) { + final LatLng latLng = (LatLng) data.getParcelableExtra("LatLng"); - distanceIndicator.setText(""); - destinationClicked = true; - MarkerOptions options = new MarkerOptions().position(latLng).title("목적지").snippet("위도:" + latLng.latitude + "/n" + "경도: " + latLng.longitude); - if (mMarker != null) { - mMarker.remove(); - } + distanceIndicator.setText(""); + destinationClicked = true; + MarkerOptions options = new MarkerOptions().position(latLng).title("목적지").snippet("위도:" + latLng.latitude + "/n" + "경도: " + latLng.longitude); + if (mMarker != null) { + mMarker.remove(); + } - if (targetMarker != null) { - clusterManager.removeItem(targetMarker); - clusterManager.cluster(); - } - mMarker = mMap.addMarker(options); - setDestination(); + if (targetMarker != null) { + clusterManager.removeItem(targetMarker); + clusterManager.cluster(); + } + mMarker = mMap.addMarker(options); + setDestination(); - bottomSheetBehavior.setState(bottomSheetBehavior.STATE_COLLAPSED); - mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16)); + bottomSheetBehavior.setState(bottomSheetBehavior.STATE_COLLAPSED); + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16)); } } // onActivityResult() @@ -1456,7 +1432,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { @Override public void onessaySetlected(int position) { Intent intent = EssayDetailActivity.newIntent(this, position); - startActivityForResult(intent,5004); + startActivityForResult(intent, 5004); } @@ -1466,47 +1442,49 @@ public void onBackPressed() { if (bottomSheetBehavior.getState() == 3) { bottomSheetBehavior.setState(bottomSheetBehavior.STATE_COLLAPSED); pressedTime = 0; - } else if((myMarker != null && mMarker != null)|| (myMarker != null && targetMarker != null)||(myMarker != null && targetId != null && targetIdMarker != null)){ + } else if ((myMarker != null && mMarker != null) || (myMarker != null && targetMarker != null) || (myMarker != null && targetId != null)) { - AlertDialog.Builder dialog = new AlertDialog.Builder(context); + AlertDialog.Builder dialog = new AlertDialog.Builder(MapsActivity.this); - dialog.setTitle( "목적지 취소여부" ) + dialog.setTitle("목적지 취소여부") .setMessage("선택된 목적지를 취소하시겠습니까?") - .setNegativeButton("아니요", new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialoginterface, int i) { - dialoginterface.cancel(); - } - }) .setPositiveButton("예", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { -// if(myMarker != null && mMarker != null){ -//// shapeView.setBackground(null); -// distanceIndicator.setVisibility(View.GONE); -// Toast.makeText(context, "목적지를 취소합니다", Toast.LENGTH_SHORT).show(); -// destinationClicked = false; -// -// mMarker.remove(); -// }else if(myMarker != null && targetMarker != null){ -//// shapeView.setBackground(null); -// distanceIndicator.setVisibility(View.GONE); -// distanceIndicator.setText(""); -// Toast.makeText(context, "목적지를 취소합니다", Toast.LENGTH_SHORT).show(); -// destinationClicked = false; -// clusterManager.removeItem(targetMarker); -// clusterManager.cluster(); -// -// }else if(myMarker != null && targetId != null && targetIdMarker != null){ -//// shapeView.setBackground(null); -// distanceIndicator.setVisibility(View.GONE); -// distanceIndicator.setText(""); -// Toast.makeText(context, "목적지를 취소합니다", Toast.LENGTH_SHORT).show(); -// destinationClicked = false; -// targetId = null; -// targetIdMarker = null; -// -// } + if(myMarker != null && mMarker != null){ + shapeView.setBackground(null); + distanceIndicator.setVisibility(View.GONE); + Toast.makeText(context, "목적지를 취소합니다", Toast.LENGTH_SHORT).show(); + destinationClicked = false; + + mMarker.remove(); + mMarker =null; + }else if(myMarker != null && targetMarker != null){ + shapeView.setBackground(null); + distanceIndicator.setVisibility(View.GONE); + distanceIndicator.setText(""); + Toast.makeText(context, "목적지를 취소합니다", Toast.LENGTH_SHORT).show(); + destinationClicked = false; + clusterManager.removeItem(targetMarker); + clusterManager.cluster(); + targetMarker = null; + + }else if(myMarker != null && targetId != null){ + shapeView.setBackground(null); + distanceIndicator.setVisibility(View.GONE); + distanceIndicator.setText(""); + Toast.makeText(context, "목적지를 취소합니다", Toast.LENGTH_SHORT).show(); + destinationClicked = false; + targetId = null; + targetIdMarker = null; + + } } - }).show(); + }).setNegativeButton("아니요", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialoginterface, int i) { + dialoginterface.cancel(); + } + }); + dialog.create().show(); } else { // 백키를 두번 눌렀을때, 그 간격이 2초 이하면 어플 종료 @@ -1633,26 +1611,32 @@ private void cropImage() { //클릭을 했으면 작동 백키를 눌렀으면 취소 // 검색한 주소, 내가 임의로 설정한 위치, 내글에 대한 목적지 설정 private void setDestination() { - Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.arrow2); - Bitmap bitmap1 = PersonItemRenderer.getCircleBitmap(bitmap); + Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.arrow_final); +// Bitmap bitmap1 = PersonItemRenderer.getCircleBitmap(bitmap); double degree = 0; - if(mMarker!= null){ - degree = SphericalUtil.computeHeading(myMarker.getPosition(),mMarker.getPosition()); - }else if(targetMarker!= null){ - degree = SphericalUtil.computeHeading(myMarker.getPosition(),targetMarker.getPosition()); - }else if(targetIdMarker != null){ - degree = SphericalUtil.computeHeading(myMarker.getPosition(),targetIdMarker.getPosition()); + if (mMarker != null) { + degree = SphericalUtil.computeHeading(myMarker.getPosition(), mMarker.getPosition()); + } else if (targetMarker != null) { + degree = SphericalUtil.computeHeading(myMarker.getPosition(), targetMarker.getPosition()); + } else if (targetIdMarker != null) { + degree = SphericalUtil.computeHeading(myMarker.getPosition(), targetIdMarker.getPosition()); } - if(arrow!= null){ + if (arrow != null) { arrow.remove(); } - GroundOverlayOptions groundOverlayOptions = new GroundOverlayOptions().image(BitmapDescriptorFactory.fromResource(R.drawable.arrow2)) - .position(myMarker.getPosition(),300,300).bearing((float)degree -90); - arrow = mMap.addGroundOverlay(groundOverlayOptions); + MarkerOptions markerOptions = new MarkerOptions(); + markerOptions.rotation((float)degree-90.0f); + markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap)); + + markerOptions.position(myMarker.getPosition()); + markerOptions.anchor(0.0f,0.5f); + Toast.makeText(context, "U:" +markerOptions.getAnchorU()+"V: " + markerOptions.getAnchorV(), Toast.LENGTH_SHORT).show(); + arrow = mMap.addMarker(markerOptions); + shapeView.setBackground(getDrawable(R.drawable.shape)); distanceIndicator.setVisibility(View.VISIBLE); // Log.i("KSJ", myMarker.getPosition() + "||"+ mMarker.getPosition() + ""); @@ -1662,9 +1646,9 @@ private void setDestination() { int index = stringDistance.indexOf("."); String m = stringDistance.substring(0, index); Toast.makeText(context, index + "", Toast.LENGTH_SHORT).show(); - String cm = stringDistance.substring(index+1,index+3); + String cm = stringDistance.substring(index + 1, index + 3); Log.i("KSJ", "distance: " + distance); - distanceIndicator.setText("목적지까지의 거리: " +m + "M " + cm + "CM"); + distanceIndicator.setText("목적지까지의 거리: " + m + "M " + cm + "CM"); if (distance < 100) { shapeView.setBackground(null); @@ -1677,14 +1661,13 @@ private void setDestination() { } } else if (myMarker != null && targetMarker != null) { Log.i("KSJ", myMarker.getPosition() + "||" + targetMarker.getPosition() + "target?"); - double distance = SphericalUtil.computeDistanceBetween(myMarker.getPosition(), targetIdMarker.getPosition()); + double distance = SphericalUtil.computeDistanceBetween(myMarker.getPosition(), targetMarker.getPosition()); String stringDistance = Double.toString(distance); int index = stringDistance.indexOf("."); String m = stringDistance.substring(0, index); - Toast.makeText(context, index + "", Toast.LENGTH_SHORT).show(); - String cm = stringDistance.substring(index+1,index+3); + String cm = stringDistance.substring(index + 1, index + 3); Log.i("KSJ", "distance: " + distance); - distanceIndicator.setText("목적지까지의 거리: " +m + "M " + cm + "CM"); + distanceIndicator.setText("목적지까지의 거리: " + m + "M " + cm + "CM"); if (distance < 100) { shapeView.setBackground(null); @@ -1699,26 +1682,27 @@ private void setDestination() { } } else if (myMarker != null && targetId != null && targetIdMarker != null) { - double distance = SphericalUtil.computeDistanceBetween(myMarker.getPosition(), targetIdMarker.getPosition()); - String stringDistance = Double.toString(distance); - int index = stringDistance.indexOf("."); - String m = stringDistance.substring(0, index); - Toast.makeText(context, index + "", Toast.LENGTH_SHORT).show(); - String cm = stringDistance.substring(index+1,index+3); - Log.i("KSJ", "distance: " + distance); - distanceIndicator.setText("목적지까지의 거리: " +m + "M " + cm + "CM"); - if (distance < 100) { - shapeView.setBackground(null); - distanceIndicator.setVisibility(View.GONE); - distanceIndicator.setText(""); - Toast.makeText(context, "도착하였습니다", Toast.LENGTH_SHORT).show(); - destinationClicked = false; - targetId = null; - targetIdMarker = null; - } + + double distance = SphericalUtil.computeDistanceBetween(myMarker.getPosition(), targetIdMarker.getPosition()); + String stringDistance = Double.toString(distance); + int index = stringDistance.indexOf("."); + String m = stringDistance.substring(0, index); + String cm = stringDistance.substring(index + 1, index + 3); + Log.i("KSJ", "distance: " + distance); + distanceIndicator.setText("목적지까지의 거리: " + m + "M " + cm + "CM"); + + if (distance < 100) { + shapeView.setBackground(null); + distanceIndicator.setVisibility(View.GONE); + distanceIndicator.setText(""); + Toast.makeText(context, "도착하였습니다", Toast.LENGTH_SHORT).show(); + destinationClicked = false; + targetId = null; + targetIdMarker = null; + } + } } - } diff --git a/app/src/main/java/com/example/homin/test1/PersonItemRenderer.java b/app/src/main/java/com/example/homin/test1/PersonItemRenderer.java index 3953802..bb9efbf 100644 --- a/app/src/main/java/com/example/homin/test1/PersonItemRenderer.java +++ b/app/src/main/java/com/example/homin/test1/PersonItemRenderer.java @@ -58,9 +58,16 @@ private static Activity getActivity(Context context) { } @Override - protected void onClusterItemRendered(ClusterItem clusterItem, final Marker marker) { + protected void onClusterRendered(Cluster cluster, Marker marker) { + super.onClusterRendered(cluster, marker); + marker.setAnchor(0.5f,0.5f); + + } + @Override + protected void onClusterItemRendered(ClusterItem clusterItem, final Marker marker) { + marker.setAnchor(0.5f,0.5f); Context get = getActivity(context); if (clusterItem instanceof ItemPerson) { if (get != null) { @@ -98,6 +105,7 @@ public PersonItemRenderer(Context context, GoogleMap map, ClusterManagerPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1mQ_UK~#8N?V8Jr z990yDI~v95`)HjQTsSLH5nnOB7Lp){ic7PJ=pPVQq7os3i%M7Bs_rpqF^+cCt?Hgh zCJ~&F5fwxiK?Nfu2!@cvM|R@Eg>RiCBxuTWZr_5jEwMAxj$Pg7gR_{PuBuz7e)qh( zN(4a=1VIo4K@bE%5ClOG1VIo4K@bGdZ?0%oH}dKFK9K}-JXYIS;@@unMf@w;Df37j zmT&Az?ro&t$nS(!^IW@+%ETGB-z0Kzo{}Q+j?3xE6r9$v>3S;n>_|nsp7JC( z%Cx_o#r0e45kwcOSfpBVA1E(#U}mwO%H1!f0+b0``)AnN2Y6iDRGD$Ew8s(%YkCjz zR_&Z<1%G#14hwy|tl}UebvLNt^oppk+cH&l>dLcF3cV>K_lZigc9mUT zF@U;o*0gPTH@OlPgF!uMssfx0X?04r0;e$B8?xk+CL1rOuy>%QMgSa?ZX*$>0r4AcepuJh09~Q-8qqkC_@U@*bI(YmC{Y6$5zc zlYJj1bekzppuV(yv5342P&gmqp=v;U+lW&kyPRSH_0>&G`#+e;bl#0G*D|Hy1B(4K zB65#HY^!ozz5kjWTbW%(aS>rP>3jQz?HMKkFi1=nAQ2oAk*~O}Zz$<4m)T1fAE~SN zzzv@@TPx2Iy&5K-EPKMkfOxh51^E%2Ophh%-nFkf++K3HV4*i}hMsv&>BVrAk6RPs z8Yt~N)9Mg7?**>C4TT&ATnsYw9|F~!H?>xtbMg$8X1Aw}X{RAMd?X{~l$-AQQlntm zbICZ)?!juYVOf-=C_VmeGGl-Rtej4=#`cSln$GW^8Tr4MyKKQ*d_vKCoP_V^L!LuWNO z>@#f8jnnY0EZoZY{)<+>f#cp~+I_m*uC2325MAJ#Sygb@Ia9vG>RWK=d(e$MBc_}i zNol>XfB&W8HSa#?J0HeQ#C}Q;1VIo4K@bE%5ClOG1VIo4K@h`Asq`n3jte71yj3^= O0000 - + \ No newline at end of file diff --git a/app/src/main/res/drawable/white_border.xml b/app/src/main/res/drawable/white_border.xml index 3091fd7..2577461 100644 --- a/app/src/main/res/drawable/white_border.xml +++ b/app/src/main/res/drawable/white_border.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_maps.xml b/app/src/main/res/layout/activity_maps.xml index 8284d33..ed4f2f8 100644 --- a/app/src/main/res/layout/activity_maps.xml +++ b/app/src/main/res/layout/activity_maps.xml @@ -29,11 +29,11 @@ +