💻 개발/TIL

[TIL] 22.03.17

고도고도 2022. 3. 17. 14:06

공부한 것

안드로이드 강의 수강

  • CameraX
  • Glide
  • Content Resolver
  • ScaleGestureDetector

알게된 것

1. AddTextChangedListener

대부분의 어플리케이션에서 검색창에 검색어를 입력하면 사용자가 Enter 를 누르기도 전에 입력한 검색어에 따라 자동완성 검색어가 변경되는 것을 볼 수 있다. 이를 구현하기 위해선 EditText 의 텍스트 변화를 감지해야하는데 이를 AddTextChangedListener 를 통해 감지할 수 있다.

private fun bindViews() = with(binding) {
    editTextView.addTextChangedListener {
        Log.d("Changed!", editTextView.text.toString())
        // Todo - 검색 API 구현
    }
}

 

로그를 찍어보았다. 사용자의 입력에 따라 로그가 출력되는 것을 볼 수 있다.

2. CameraX

3. ScaleGestureDectector

안드로이드에서는 자체적으로 줌 인, 줌 아웃 기능을 제공한다. ScaleGestureDectector 를 활용하고 onScale 의 매개변수로 넘겨주는 detectorscaleFactor 를 곱해주면 된다.

    private fun bindViews() {
        var scale = 1.0F

        // 리스너 객체를 구현하고
        val scaleGestureListener = object : ScaleGestureDetector.SimpleOnScaleGestureListener() {
            override fun onScale(detector: ScaleGestureDetector): Boolean {
                scale *= detector.scaleFactor
                Log.d("kodohyeon", scale?.toString()!!)
                return true
            }
        }

        // 생성자에 전달
        val scaleGestureDetector = ScaleGestureDetector(this, scaleGestureListener)

        // 발생한 터치이벤트를 전달
        binding.root.setOnTouchListener { v, event ->
            scaleGestureDetector.onTouchEvent(event)
            return@setOnTouchListener true
        }
    }

 

로그를 찍어보면 4배까지 증가했다가 0.5배로 감소하는 것을 볼 수 있다.

4. Application Class

오늘 CameraX 프로젝트를 구현하면서 구현 초기에 Application 클래스 를 상속하는 CameraXApplication 클래스 를 정의했다. 프로젝트를 완성하고 Application 에 대해 좀 더 알아보았다. 우선 공식 문서에서는 이렇게 설명한다.

 

전역 응용 프로그램 상태를 유지하기 위한 기본 클래스입니다. 하위 클래스를 만들고 이 하위 클래스의 정규화된 이름을 "android:name"AndroidManifest.xml 태그의 속성으로 지정하여 고유한 구현을 제공할 수 있습니다. Application 클래스 또는 Application 클래스의 하위 클래스는 애플리케이션/패키지에 대한 프로세스가 생성될 때 다른 클래스보다 먼저 인스턴스화됩니다.

 

즉, 해당 클래스를 전역으로 사용하기 위해서 필요하고 Manifest의 Application 에 설정하면 해당 클래스보다 먼저 인스턴스화된다는 의미이다. 이번 프로젝트에서는 Camera2Config 값을 CameraX 에 전달하기 위해 사용했다.

package com.example.camerax

import android.app.Application
import androidx.camera.camera2.Camera2Config
import androidx.camera.core.CameraXConfig

class CameraXApplication : Application(), CameraXConfig.Provider {
    override fun getCameraXConfig(): CameraXConfig = Camera2Config.defaultConfig()
}

사실 이 부분을 작성하지 않아도 된다. CameraX 의 구글 코드랩도 이 부분 없이 코드를 작성하고 있다. 아무튼 클래스 간 객체를 전달할 때 Application 을 활용하면 유용할 듯 싶다.

공부할 것

자기 전에 MVVM 개념 맛보기

느낀 점

재밌다.

'💻 개발 > TIL' 카테고리의 다른 글

[TIL] 22.03.20  (0) 2022.03.20
[TIL] 22.03.19  (0) 2022.03.19
[TIL] 22.03.17  (0) 2022.03.17
[TIL] 22.03.16  (0) 2022.03.16
[TIL] 22.03.15  (0) 2022.03.15
[TIL] 22.03.14  (0) 2022.03.14