본문 바로가기

[안드로이드] SeekBar의 Thumb 색상 실시간 변화주기, BlendModeColorFilter 사용하기 (feat. ColorFilter deprecated) 금번에 SeekBar의 Thumb에 새로운 인터랙션을 주게 되면서 기존에 적용해 둔 Listener에 ColorFilter를 먹이고자 했다. 하지만 ColorFilter를 먹이던 시절은 이미 오래 전이었고.. 현재는 deprecated 된 요소였던 것이다. 그러면 무엇을 써야하는 것인가? 검색을 통해 BlendModeColorFilter라는 클래스를 찾을 수 있었다. BlendModeColorFilter | Android 개발자 | Android Developers BlendModeColorFilter public final class BlendModeColorFilter extends ColorFilter A color filter that can be used to tint the source pix..
[안드로이드] 안드로이드 스튜디오 3.6 업데이트, ViewBinding 사용해보기 이번 2월 25일에 안드로이드 스튜디오 버전 3.6이 릴리즈 되면서, 안드로이드 스튜디오의 자잘한 UI/UX 변화와 함께 다양한 기능들이 추가되었다. 이번에 추가된 기능들 중에 먼저 눈에 들어왔던 뷰바인딩을 적용해 본 경험을 공유하고자 한다. https://developer.android.com/topic/libraries/view-binding?utm_medium=studio-assistant-stable&utm_source=android-studio-3-6 뷰 바인딩 | Android 개발자 | Android Developers 뷰 바인딩 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 바인딩은 모듈에 있는 각 XML 레이아웃 파일의 바인딩 클래스를 생성합..
[안드로이드/MpAndroidChart] MpAndroidChart에서 Marker 커스텀하기 그래프의 바를 터치할 때 해당 데이터를 보여주는 Marker를 구현중에 있었는데, 공식 문서에 안내되어 있는 getOffset()을 Override하는 방식으로는 위치조정을 하는 것이 어려웠다. 구글링을 더 해보니 getXOffset, getYOffset을 override해 사용하는 경우가 많았으나, Kotlin 환경때문인지 몰라도 override 메소드가 보이지 않았다. 최종적으로 MarkerView의 draw 메소드를 override하여 보여주고자 하는 위치를 조정해 보여주는 걸로 구현을 마칠 수 있었다. * MPAndroidChart 3.1.0 버전에서 진행 * BarChart 사용 * Kotlin 베이스 1. BarChart 구성 완료 BarEntry, BarDataSet, Ba..
[안드로이드] Room 데이터베이스의 테이블 등을 업데이트 할 시, Migration 옵션을 필히 집어넣자. 기존 프로젝트의 로컬 DB 테이블에 컬럼을 삽입해야하는 요구사항이 생겼는데, 이를 진행하면서 필수적이었던 Migration 과정을 리뷰해두고자 한다. Room DB를 안드로이드에 설정할 때에는 @Database 어노테이션에 vesion number를 명시하는데, 신규 변경사항이 생길 경우 version number를 올려주어야 하는 것은 물론, 이전 버전에서 신규 버전으로 올라가면서 달라진 점들에 대해 어떻게 변경사항을 집어넣을 것인지 Migration이라는 클래스를 사용해 작성하여 적용해주어야 한다. 아래는 Google documentation이 예시로 들고있는 Migration Object이다. val MIGRATION_1_2 = object : Migration(1, 2) { override fun..
[안드로이드] ConstraintLayout + CollapsingToolbarLayout 활용해 접히는 TabBar 구현하기 뱅크샐러드 및 야놀자 등 상단 탭영역이 접히는 UI/UX를 프로젝트에 적용하고자 했다. 구현을 위해 고르게 된 layout은 CollapsingToolbarLayout으로, 이름은 Toolbar로 딸려있지만 컴포넌트들을 추가해 툴바 이상의 요소들을 보여줄 수 있는 걸 확인할 수 있었다. 처음에는 레이아웃 코드 적용 후에도 동작이 되지 않거나, 스와이프 중 뷰가 제대로 접히지 않고 따로 논다던지 등의 이슈가 있었는데, 이하 문제들을 해결하면서 적용한 요소들을 정리를 해두고자 한다. 이번 구현에 있어 공식문서 외에 실구현 사례들을 레퍼런스로 삼아 차이점이 존재할 수 있으니, material.io에 나와있는 공식문서를 참조하는 것도 좋을 것 같다. Collapsing Toolbars - Material Com..
[RxJava] 기술면접 대비 RxJava 정리하기 기술면접에 앞서 알고 있던 내용들과 RxJava에서 빈번하게 쓰일 것들을 추려 정리를 좀 해두기로 했다. (질문의 경우 추가적으로 업데이트 예정) Q: Why? 왜 RxJava를 사용하는가? A: RxJava는 비동기 프로그래밍을 구현하도록 해주는 기술로써, 기존 동기식 프로그래밍에서 스레드간 경쟁구도로 인해 발생할 수 있는 이슈들을 제거하고, 프로그래밍의 중심을 데이터 우선으로 하게 됨으로써 서버통신 등 데이터가 중심이 되는 구조를 짜고자 할 때 유용하게 쓸 수 있기 때문이다. - 멀티스레딩시 애로사항 및 Race Condition 관련 보기좋은 자료 https://www.slideshare.net/iamhjoo/ss-44214966 Q: Hot Observable과 Cold Observable의 차이..
[Git] master(default)브랜치에 다른 브랜치 덮어쓰기 진행하던 프로젝트의 master(defalut) 브랜치가 어느시점부터 관리가 안되었는지 2년전 즈음으로 머물러 있었고, 현재 시점에서 수작업으로 액티브 브랜치를 merge 하기에는 필요 이상의 공수가 들 참이었다. 그러는 중에 좋은 솔루션을 Stack Overflow에서 발견했고, 이를 통해 master 브랜치를 갈아 엎는데 성공했다. 순서는 아래와 같으며 터미널 및 git bash를 활용할 때 입력하는 명령어들을 기준으로 한다. 1. 현재 master가 remote의 최신 버전과 동기화되도록 세팅 2. 덮어쓰고자 가져올 branch(feature)를 checkout 3. git merge --strategy=ours master 입력 4. git checkout master 입력 5. git merge..
[안드로이드] MVVM 아키텍처로 간단한 계산기 만들기 MVVM을 초기단계부터 파서 좀 익숙해지고자 하는 마음에 계산기를 떠올렸고, 이를 MVVM 아키텍처를 이용해 구현하고자 했다. 사실 MVVM의 강점을 살린다기보단 MVVM의 형태와 Databinding을 활용해 로직을 짤 때 어떠한 방식으로 활용이 가능한지 알아볼 수 있는 과제였던듯. 간단한 순서 1. app 레벨 gradle에 Databinding 활성화 - kotlin-kapt plugin설정이 들어가있지 않다면 최상단 부분에 apply plugin: 'kotlin-kapt' 를 추가해주어야 함. android { ... dataBinding { enabled = true } ... } 2. 메인 레이아웃의 databinding 설정 ... 3. ViewModel의 설정 - 양방향 바인딩을 적용할 O..