Tracking center coords - Picplz/picplz-aos GitHub Wiki

์นด์นด์˜ค๋งต ์ง€๋„์˜ ์ค‘์•™ ์ขŒํ‘œ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ

kakaoMap.setOnCameraMoveEndListener ํ•ด๋‹น ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ˜ธ์ถœํ•ด์„œ onCameraMoveEnd๋ฅผ ํ†ตํ•ด ์นด๋ฉ”๋ผ๊ฐ€ ์›€์ง์ž„์ด ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋™์ž‘์ด ์ž‘๋™ํ•˜๋„๋ก ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค

    public interface OnCameraMoveEndListener {
        void onCameraMoveEnd(@NonNull KakaoMap var1, @NonNull CameraPosition var2, @NonNull GestureType var3);
    }

์ด ํ•จ์ˆ˜๋Š” 3๊ฐ€์ง€์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉฐ ์—ฌ๊ธฐ์„œ CameraPosition์€

    CameraPosition(double latitude, double longitude, int zoomLevel, double tiltAngle, double rotationAngle, double height) {
        this.position = LatLng.from(latitude, longitude);
        this.zoomLevel = zoomLevel;
        this.tiltAngle = tiltAngle;
        this.rotationAngle = rotationAngle;
        this.height = height;
    }

image ์œ„์™€ ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

@Composable
fun KakaoMapView(
    ...
    onCameraMoveEnd: (KakaoMap, CameraPosition, GestureType) -> Unit = { _: KakaoMap, _: CameraPosition, _: GestureType -> },
) {
    var mapView by remember { mutableStateOf<MapView?>(null) }

    AndroidView(
        modifier = modifier,
        factory = { context ->
            MapView(context).also { mapView = it }.apply {
                layoutParams = ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT,
                )
                start(
                    object : MapLifeCycleCallback() {
                        ...
                    },
                    object : KakaoMapReadyCallback() {
                        override fun onMapReady(kakaoMap: KakaoMap) {
                            // ์ธ์ฆ ํ›„ API๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋  ๋•Œ ํ˜ธ์ถœ๋จ
                            onMapReady(kakaoMap)
                            kakaoMap.setOnCameraMoveEndListener { cameraListenerKakaoMap, cameraPosition, gestureType ->
                                onCameraMoveEnd(
                                    cameraListenerKakaoMap,
                                    cameraPosition,
                                    gestureType
                                )
                            }
                        }
                        ...
                    }
                )
            }
        }
    )

    val lifecycleOwner = LocalLifecycleOwner.current

    DisposableEffect(lifecycleOwner) {
        val observer = object : DefaultLifecycleObserver {
            ...
        }

        lifecycleOwner.lifecycle.addObserver(observer)

        onDispose {
            lifecycleOwner.lifecycle.removeObserver(observer)
        }
    }
}

์นด์นด์˜ค๋งต๋ทฐ๋ฅผ ์œ„์™€ ๊ฐ™์ด ์ž‘์„ฑํ•ด์„œ setOnCameraMoveEndListener๋ฅผ ์„ค์ •ํ•œ ํ›„

KakaoMapView(
    ...
    onCameraMoveEnd = {_, cameraPosition, _ ->
        viewModel.handleIntent(SearchPhotographerIntent.SetCenterCoords(cameraPosition.position))
    }
)

์ด์ฒ˜๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ onCameraMoveEnd ๋™์ž‘์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค

โš ๏ธ **GitHub.com Fallback** โš ๏ธ