고도고도
🍎🍏
고도고도
전체 방문자
13,424
오늘
31
어제
64
  • 분류 전체보기 (170)
    • 🔨 프로젝트 (0)
      • TP 1 (0)
      • WhiteHCCTV (0)
      • FootPrint (0)
    • 💻 개발 (61)
      • iOS (28)
      • Android (6)
      • Kotlin (4)
      • Flutter (9)
      • Node.js (5)
      • Architecture (1)
      • 오늘의 삽질 (7)
      • 에러와의 동침 (1)
    • ✏️ 알고리즘 (6)
      • Graph (6)
      • String (0)
      • Sort (0)
    • ✍️ 코테 준비 (44)
      • Math (1)
      • Implementation (3)
      • String (3)
      • Brute Force (5)
      • Back Tracking (7)
      • Greedy (0)
      • Dynamic Programming (13)
      • Binary Search (1)
      • DFS, BFS (5)
      • Shortest Path (2)
      • Two Pointer (4)
      • MST (0)
    • 📚 CS (6)
      • Operating System (6)
    • ⛹️ 라이프 (53)
      • 2020 겨울방학 모칵코(팀) (13)
      • 2020 겨울방학 모각코(개인) (13)
      • 2021 여름방학 모칵코(팀) (8)
      • 2021 여름방학 모각코(개인) (7)
      • 코딩 테스트 (1)
      • 회고 (10)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인

공지사항

인기 글

  • [NCSOFT] 2022 엔씨소프트 썸머 인턴 후기 - 1⋯
    2022.08.10
    [NCSOFT] 2022 엔씨소프트 썸머 인턴 후기 - 1⋯
  • [Flutter] SingleChildScrollView,⋯
    2021.08.18
    [Flutter] SingleChildScrollView,⋯
  • [iOS / SwiftUI] MapKit, 실시간으로 도로⋯
    2022.12.20
    [iOS / SwiftUI] MapKit, 실시간으로 도로⋯
  • [Android] 백그라운드에서 소켓 통신으로 이벤트 수신⋯
    2022.06.08
    [Android] 백그라운드에서 소켓 통신으로 이벤트 수신⋯
  • [iOS / SwiftUI] OnAppear, OnDisa⋯
    2022.12.01
    [iOS / SwiftUI] OnAppear, OnDisa⋯

최근 댓글

  • https://developer.apple.com/docu⋯
    고도고도
  • 게시글 잘 보았습니다. 혹시 주소에서 구를 가지고 오시는⋯
    나그네
  • 혹시 댓글이 안보이는데 .. y2e010924@naver.⋯
    eun
  • 글 솜씨가 뛰어나시네요! 좋은 글 잘 보고 갑니다 다음에도⋯
    alpha-traveler
  • NC......가슴이...웅장해집니다.......🤯
    이상한핑구 🐧

최근 글

  • [Architecture] MVVM + Clean Arch⋯
    2023.01.07
    [Architecture] MVVM + Clean Arch⋯
  • [iOS / SwiftUI] MapKit, 실시간으로 도로⋯
    2022.12.20
    [iOS / SwiftUI] MapKit, 실시간으로 도로⋯
  • [iOS / SwiftUI] OnAppear, OnDisa⋯
    2022.12.01
    [iOS / SwiftUI] OnAppear, OnDisa⋯
  • [에러와의 동침] 22년 11월 4주차
    2022.11.28
    [에러와의 동침] 22년 11월 4주차
  • [iOS / SwiftUI] 스크롤, 무한으로 즐겨요~ (⋯
    2022.11.28
    [iOS / SwiftUI] 스크롤, 무한으로 즐겨요~ (⋯

티스토리

hELLO · Designed By 정상우.
고도고도

🍎🍏

[TIL] 22.03.17
💻 개발/iOS

[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 의 매개변수로 넘겨주는 detector 의 scaleFactor 를 곱해주면 된다.

    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 에 설정하면 해당 클래스보다 먼저 인스턴스화된다는 의미이다. 이번 프로젝트에서는 Camera2 의 Config 값을 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 개념 맛보기

느낀 점

재밌다.

저작자표시 비영리 변경금지

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

[TIL] 22.03.20  (0) 2022.03.20
[TIL] 22.03.19  (0) 2022.03.19
[TIL] 22.03.16  (0) 2022.03.16
[TIL] 22.03.15  (0) 2022.03.15
[TIL] 22.03.14  (0) 2022.03.14
    '💻 개발/iOS' 카테고리의 다른 글
    • [TIL] 22.03.20
    • [TIL] 22.03.19
    • [TIL] 22.03.16
    • [TIL] 22.03.15
    고도고도
    고도고도
    iOS 꿀잼
    댓글쓰기
    [TIL] 22.03.19
    다음 글
    [TIL] 22.03.19
    [TIL] 22.03.16
    이전 글
    [TIL] 22.03.16

    티스토리툴바