본문 바로가기

[안드로이드] 레이아웃에 실시간 Blur 효과 주기 (가우시안 블러) 배경 레이아웃에 Blur 효과를 주기 위한 몇몇 방법들을 조금 살펴보았는데, 적용할 정도에 비해 작업이 투머치가 들어가는 것 같아 적용하다 롤백을 반복했는데 그 와중에 좋은 라이브러리를 찾아 적용까지 마칠 수 있었다. https://github.com/mmin18/RealtimeBlurView mmin18/RealtimeBlurView A realtime blurring overlay for Android (like iOS UIVisualEffectView) - mmin18/RealtimeBlurView github.com 우선 일반적인 라이브러리 적용하는 대로 gradle에 implementation을 마치고 나면 Blur를 적용하고자 하는 영역 위에 전체 혹은 원하는 크기만큼 BlurView를 레이아..
[안드로이드/Kotlin] ViewPager로 온보딩 페이지 간단히 구현하기 코틀린 환경에서 온보딩 페이지를 구현할 일이 생겼는데, 유투브에서 매우 친절한 영상을 찾아 1시간도 못되는 시간안에 온보딩 페이지를 구현할 수 있었다. (물론 영상에서는 자바로 진행하지만) 간단히 아래의 준비물들만 착착 적어넣으면 온보딩 페이지를 만들 수 있다. - 페이지 구성에 필요한 별도의 PagerAdapter 클래스 PagerAdapter는 각 페이지를 구성하는 핵심 역할을 한다. 각 페이지에 띄울 이미지와 제목, 그리고 내용을 각 array로 구현하여 페이지별로 적용할 수 있고, 필요에 따라 버튼구성의 변경등도 가능하다. 별도의 코틀린 파일로 생성하여 프로젝트에 추가한다. 아래의 코드는 필수적으로 구현해야 하는 부분들로, 기타 필요 요소들은 생략하였다. class SliderAdapter : P..
[안드로이드/Kotlin] Activity에서 Fragment의 요소를 제어하자 처음에는 Fragment 제어를 위해 interface를 구현해 listener를 만드는 등 복잡한 절차를 거치려 하고 있었는데, interface를 쓰지 않고 아주 간단하게 Fragment의 요소를 제어할 수 있는 방법을 발견했다. 내가 하고자 했던 일은 Fragment에 구현된 RecyclerView를 refresh하는 것이었는데, 아래 과정을 통해 이를 해결할 수 있었다. 1. Fragment에 refresh를 수행하는 메소드를 추가 fun doSomething() { } 2. Activity에서 Fragment를 참조 val fragment : Fragment클래스 = supportFragmentManager.findFragmentById(R.id.프래그먼트컨테이너) as Fragment클래스 3..
[안드로이드] 구글 플레이스토어 업로드시 발생하는 no properties to serialize found on class Exception 잡기 구글 플레이스토어에 앱 업데이트를 위해 알파버전을 업로드해 테스팅을 진행하고 있는데, 구글에서 테스트한 기기에서 발생한 것 이외에도 직접 업데이트를 진행했을 때 no properties to serialize found on class Exception 이 발생하면서 앱이 초기에 종료되는 현상이 있었다. 서치에다 수정을 반복해서(거의 반나절을) 오류를 잡을 수 있었는데 원인은 1. 번들이나 apk로 만들어질 때 릴리즈 버전에 적용되는 proguard rule 2. Firebase와 연관된 변수들이 private으로 적용됨 정도가 있었다. 1번의 경우 #firebase 관련 이슈 핸들링 위해 proguard rules 수정 -keep public class com.회사.entity.* -keepclassm..
[안드로이드] 앱 스토어 릴리즈용 APK 혹은 Bundle을 만들고자 할 때 발생하는 “Exception while processing task java.io.IOException: Please correct the above warnings first” 곧 시범 릴리즈를 앞두고 앱 빌드를 하는중에 예기치 못한 거대한 숙제에 직면했다. “Exception while processing task java.io.IOException: Please correct the above warnings first” 라는 메시지와 함께 400개가 넘는 오류를 보여주었는데, 자잘자잘한 경고항목들을 수정하는 중에 개별 항목을 전부 수정할 필요가 없다는 것을 알았다. 물론 몇백개의 오류들이 이 문제 때문에 애초에 발생한 것이기 때문에 상당수의 경고를 줄일 수 있었던것이다. 문제는 프로젝트 내에서 사용하는 RxKotlin 때문인데, Rx관련 코드들을 Proguard가 난독화하는 과정에서 오류가 나는 것으로 여겨졌다. 첫번째로 시도한 해결방법은 build.gradle(Modul..
[안드로이드/Kotlin] RecyclerView의 아이템에 listener 달기 1. onClickListener를 포함한 Listen function을 정의 fun T.listen(event: (position: Int, type: Int) -> Unit): T { itemView.setOnClickListener { event.invoke(getAdapterPosition(), getItemViewType()) } return this } 2. RecyclerView의 Adapter 클래스에 listen시의 동작을 정의 class MyAdapter : RecyclerView.Adapter() { val items: MutableList = arrayListOf() override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int..
[안드로이드] Fragment로 전달된 Touch 이벤트를 액티비티에서 처리하기 문제점 Swipe Layout에 touch가 들어올 때 이를 Listen하고자 하였으나 Activity에서 적용시 1도 들어오지 않음 해결책 1. Touch를 Listen하고자 하는 Fragment 내부에 onTouchListener를 override 2. 본래 액티비티에서 수행하고자 했던 메소드를 Fragment 내부에 선언 3. onTouch Override, 하고자 하는 동작이나 함수 정의 4. Fragment 내부의 onCreateView() 에서 Fragment가 배치되는 view(swipe되는 부분)에 onTouchListener 설정 (5) 경우에 따라 Fragment에서 Activity의 다른 레이아웃을 제어하고자 하는 경우 activity?.findViewById(R.id.제어할레이아웃)..
[안드로이드] MVC, MVP, MVVM에 대해 알아보자 안드로이드 앱을 구성하는데 있어 베스트 프랙티스 패턴을 크게 고려하지 않는 편이었는데, (아마 전통적인 형태의 MVC에 가깝게 짜여지지 않았을까) 중장기간 개발과 유지보수, 업그레이드 및 테스트에 관련해 세가지 패턴을 알고 그에있는 장단을 알아두는 것은 분명하게 필요해보인다. Realm 아카데미에 세가지 패턴에 대해 아주 잘 설명해 둔 자료가 있어 이를 참조해 간단히 정리하며 익혀본다. 시작하기에 앞서 Best practice 접근법에 대해 보자면 What is Best practice? - Best practice 접근법이란 안드로이드 앱을 논리적 구성요소로 체계화하기 위해 생겨남. - MVC 패턴을 초석으로 모듈화되고 테스트 가능한 패턴으로 발전해 왔다. - MVP와 MVVM 패턴은 MVC를 대체하기..