google map 에서 움직이는 마커 사용하기
[출처] https://exceptionshub.com/rotate-marker-and-move-animation-on-map-like-uber-android-2.html
아래 소스는 출력된 마커를 터치하면 목적지까지 부드럽게 마커가 이동하는 소스입니다.
(녹색 부분 제외하면 터치 없이 실행 됩니다)
어렵게 구했습니다.. ㅜ.ㅜ
목적에 맞게 수정해서 사용하면 됩니다.
1. onCreate 에서
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); |
2. onMapReady 에서
@Override public void onMapReady(final GoogleMap googleMap) { mMap = googleMap; final LatLng SomePos = new LatLng(37.52487, 126.92723); // 시작 지점 try { googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); // 지도 타입 googleMap.setMyLocationEnabled(true); // 내 위치 표시 googleMap.setTrafficEnabled(false); // 교통정보 레이어 googleMap.setIndoorEnabled(false); // 실내 지도 여부. 향후 normal 지도 유형에서만 지원 예정 googleMap.setBuildingsEnabled(true); // 건물 표시 googleMap.getUiSettings().setZoomControlsEnabled(true); // 줌 컨트롤러 표시 (확대, 축소) googleMap.moveCamera(CameraUpdateFactory.newLatLng(SomePos)); googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder() .target(googleMap.getCameraPosition().target) .zoom(17) .bearing(30) // 지도를 돌려서 보기 (각도) .tilt(45) // 지도를 눞여서 보기 (각도) .build())); // 마커 이미지 및 사이즈 변경 int height = 200; int width = 200; BitmapDrawable bitmapdraw = (BitmapDrawable)getResources().getDrawable(R.drawable.img_marker); Bitmap b = bitmapdraw.getBitmap(); Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false); final Marker myMarker = googleMap.addMarker(new MarkerOptions() .position(SomePos) .icon(BitmapDescriptorFactory.fromBitmap(smallMarker)) .title("Hello world")); googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker arg0) { final LatLng startPosition = myMarker.getPosition(); final LatLng finalPosition = new LatLng(37.62487, 127.02723); // 끝 지점 final Handler handler = new Handler(); final long start = SystemClock.uptimeMillis(); // AccelerateDecelerateInterpolator 는 마커 이동 유형 (움직이는 스타일) //final Interpolator interpolator = new AccelerateDecelerateInterpolator(); final float durationInMs = 4000; // 이동 시간 (ms) handler.post(new Runnable() { long elapsed; float t; @Override public void run() { // Calculate progress using interpolator elapsed = SystemClock.uptimeMillis() - start; t = elapsed / durationInMs; LatLng currentPosition = new LatLng( startPosition.latitude * (1 - t) + finalPosition.latitude * t, startPosition.longitude * (1 - t) + finalPosition.longitude * t); myMarker.setPosition(currentPosition); // Repeat till progress is complete. if (t < 1) { // Post again 16ms later. handler.postDelayed(this, 16); } } }); return true; } }); } catch (Exception e) { e.printStackTrace(); } } |
'프로그래밍 > Android (Java)' 카테고리의 다른 글
안드로이드 상태바 없애기 (시계, 알림 아이콘 부분) (0) | 2020.07.24 |
---|---|
구글맵 마커 사이즈 조절하기 (0) | 2020.05.04 |
슬라이드 레이어 만들기 (AndroidSlidingUpPanel 라이브러리) (0) | 2020.04.28 |
SQLite 에서 중복값 있으면 insert 건너뛰기 (0) | 2020.01.31 |
그라데이션 테두리 있는 버튼 만들기 (0) | 2020.01.28 |