일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 코틀린
- Jetpack
- NavController
- Build variants
- sharedFlow
- 뷰
- cleanarchitecture
- 커스텀뷰
- NavHost
- DiffUtil
- 컴포즈
- Flow
- MVVM
- ListAdapter
- Authentication
- 파이어베이스
- 리사이클러뷰
- 안드로이드
- 클린아키텍처
- UiState
- 코딩테스트
- XML
- Compose
- 알고리즘
- coroutine
- 회원가입
- 플레이스토어
- 로그인
- Android
- Kotlin
- Today
- Total
목록분류 전체보기 (53)
Grusie 안드로이드 개발 기술 블로그
네이버 클라우드에서 제공하는 네이버맵 SDK를 사용했던 적이 몇 번 있었다.회사 프로젝트에서도 사용했었는데, 클러스터링을 적용하려고 보니, 지원을 하지 않아서 서드파티 라이브러리를 사용했던 기억이 있다.웹에서는 지원을 하는데, 앱에서는 지원을 안 해줘서 너무하다는 생각을 했었다.그러던 중 올해초에 클러스터링이 업데이트 되었다는 것을 보았고, 네이버 맵을 적용하게 될 기회가 또 생겨서 기록해보려고 한다. 우선 네이버맵을 화면에 표시하는 방법은 공식문서에 잘 나와 있기에 넘어가도록 하겠다.바로 커스텀 클러스터링으로 넘어가자 기본 사용법키 정의마커 클러스터링을 사용하기 위해서는 ClusteringKey 인터페이스를 구현한 클래스를 정의해야 한다.class ClusterItemKey(private val tra..
지난 번 만들었던 이미지 크롭 리스트들을, 리사이클러뷰에 DiffUtil을 활용하여 넣도록 구현하였다.베스트 컷, 퍼니 컷이라는 속성을 가진 이 아이템들을 각각 수정하거나 삭제할 수 있는 기능을 구현했어야 했다.우선 기존에 크롭 이미지는 뷰페이저로 만들어 각 프래그먼트에서 이미지를 크롭하고 캐시 디렉토리에 저장한 뒤, ActivityViewModels로 뷰모델을 공유해서 Activity에서 Intent시켜줄 때, Uri리스트를 전달하도록 구현하였다. 디자인우선 만들어야하는 뷰를 확인해보자, 넘어온 크롭 이미지 리스트를 화면에 뿌려주고, 베스트컷/퍼니컷을 선택 할 수 있도록 구현해야 하고, 햄버거 버튼을 클릭 하면 편집/삭제가 가능하도록 해야한다.편집하기/삭제하기는 popup으로 만들어서 화면에 띄워주는 ..
작년에 구글플레이에서, 개발자 계정을 정리하겠다는 발표를 하였다. 그 때 제일 빠른 날짜로 예약을 걸어뒀는데, 이번에 개발자 계정 확인 알림이 마침 떴길래 기록해보려고 한다. 개발자 계정 확인 문구24년 8월 9일까지 개발자 계정 확인을 하지 않으면 삭제된다고 한다.(돈 내고 했는데 아까우니 까먹지 말고 하자) 개발자 계정 확인 목차단계는 이렇게 4가지 단계이다1. 개인인지 조직인지2. 결제 프로필 연결3. 계정 정보 제공4. 공개 및 비공개 세부정보 제공 계정 유형 확인(개인 or 조직)개인 계정이므로 개인으로 선택, 추 후 회사 계정도 해야하니 주의깊게 보면 좋을 것 같다. 결제 프로필 연결결제 프로필을 입력해준다.구글 계정으로 로그인 되어있기에 자동으로 처리가 될 것이다. 수정 할 거면 결제 프로필..
이미지 크롭 기능을 구현해야 할 일이 있었다.라이브러리를 사용하려고 이곳 저곳 둘러봤으나, 원하는 디자인을 전부 만족시킬 만한 라이브러리가 보이지 않았다.만약 있다고 하더라도, 언젠가 고치기 위해선 뷰는 가능하면 라이브러리를 사용하지 않는 것이 좋겠다는 생각이 들어 직접 만들게 되었다. 커스텀 뷰class ImageCropView(context: Context, attrs: AttributeSet) : ConstraintLayout(context, attrs) { private var bitmap: Bitmap? = null private var cropRect: RectF = RectF(100f, 100f, 400f, 400f) private var lastTouchX: Float = ..
안드로이드 개발을 하면서, 갤러리에서 이미지를 가져오는 기능을 안 해볼 수는 없을 것이다.이번에도 디자이너의 요청에 의해 갤러리에서 이미지를 가져와서, 순서대로 최대 10개까지 선택이 가능하도록 구현 했어야 했다.갤러리에서 직접 선택하는 것이 아닌, 앱 내 화면에서 사용했어야 했기에 content-provider를 사용하여 이미지 uri를 가져왔어야 했다.Paging라이브러리를 사용하는 것이 빠른 속도를 낼 것으로 생각되나, DiffUtil을 곁들인 ListAdapter만으로도 충분히 빠른 속도를 낼 수 있었다.+ 이미지 피커 라이브러리를 사용하지 않은 이유는 원하는 대로 커스텀 하기에 불편하다는 점이 있었다.만약 라이브러리를 사용하다가, 일정부분 수정을 해야하는데 막혀있다면, 결국 새로 만들어야 했기에..
이번 개발에 필요한 요구사항 중, 마지막으로 메일을 본 이후로 온 메일이 있다면 화면에 알림을 띄워주는 게 있었다.마지막으로 메일을 본 시간을 저장하기 위해서는, 로컬DB를 사용해야 한다고 생각하였고, 선택지는 2가지가 있었다. RoomDB SharedPreferences 간단한 데이터를 Key-Value형태로 저장할 수 있어, 보통 앱 세팅과 같은 데이터들을 저장하는데 사용한다. 이런 간단한 데이터를 담는데엔 이만한 게 없다고 생각하여 SharedPreferences로 결정하였다. SharedPreferences는 Key-Value 형태로 로컬 저장소에 저장하는 것을 도와주는 객체이다.SharedPreferences는 앞으로 DataSource로 대체 될 것이며, 공식문서에도 SharedPreferen..
사이드 프로젝트를 진행하면서, 임시저장 기능을 구현해야 했다.클린아키텍처 구조를 사용중이며, Room DB를 통해 내부저장소에 저장 할 생각을 하였다. 거두절미하고 코드를 보며 이해해보자 build.gradle.kts(Module:data)// Room DBkapt("androidx.room:room-compiler:2.6.1")implementation ("androidx.room:room-ktx:2.6.1")Room DB를 사용하기 위한 의존성을 선언해준다.kapt는 hilt를 사용하기 위해 이미 선언 해뒀을 것이라고 생각한다. Database@Database( entities = [LocalSlowMailInfo::class], version = 1, exportSchema = fa..
데이트 피커를 사용하여 날짜를 선택하는 바텀시트를 만들려고 하는데, 안드로이드 기본 데이트 피커는 커스텀이 용이하지 못한 것 같아, Number Picker로 만들어보았다. 디자이너의 요구사항은 ios와 유사한 형태의 datePicker를 요구하였으나, 힌트가 위 아래로 두 개씩 롤 모양으로 나오는 것은 커스텀하기 복잡해서 제외하고 가기로 하였다.고려해야 할 점1. 각 숫자 뒤에 년/월/일로 suffix가 붙어있다. 2. 각 월 / 2월일 경우(윤년)을 고려하여 일(day)를 조정해야한다.3. 지난 과거는 선택 할 수는 있되, 선택 시 오늘 날짜로 들어가야 한다.4. 처음 열렸을 때 날짜가 오늘 날짜여야 한다. NumberPicker XML 우선..