개발28 안드로이드 뷰가 그려지는 과정 안녕하세요. 이번 포스팅에서는 안드로이드에서 뷰가 그려지는 과정에 대해 포스팅해보겠습니다. 액티비티가 포커스를 얻게 될때 레이아웃을 그리게 요청하는데요. 뷰가 그려지는 건 레이아웃 트리의 루트노드 부터 시작하게 됩니다. 레이아웃 트리는 말그대로 레이아웃에 있는 뷰그룹이나 뷰들을 트리형태로 나타난건데 예를 들면 이런 구조로 되어 있다면 이를 오른쪽 처럼 전위순회 하면서 그려지는 방식입니다. 레이아웃을 그리는 과정은 측정패스(Measure Pass)와 레이아웃패스(Layout Pass)의 가 있습니다. Measure Pass는 onMeasure 메소드를 호출하는데 뷰의 크기를 결정하기 위한 메소드 입니다. Layout Pass는 onLayout메소드를 호출하는데 뷰의 위치를 결정하기 위해 호출되는 메소드 입.. 2021. 6. 9. 안드로이드 LiveData setValue 와 postValue 안녕하세요. 이번 포스팅은 LiveData에 값을 설정하는 2가지 메소드에 대해 알아보겠습니다. setValue는 기본적으로 MainThread에서 실행된다는 걸 전제로 하여 사용하는 메소드입니다. document를 보면 @MainThread protected void setValue(T value) { assertMainThread("setValue"); mVersion++; mData = value; dispatchingValue(null); } assertMainThread() 메소드에서 MainThread가 아닐때 바로 에러를 발생하게 됩니다. 반면에 postValue는 MainThread가 아닌 WorkerThread에서도 값을 반영 할 수 있게 되어있습니다. 그래서 MainThread가 아닌 .. 2021. 5. 13. 안드로이드 구글STT에서 Recording이 안되는 이유 안녕하세요. 이번 포스팅은 구글STT를 실행하면서 Recording하는 방법을 알려드리고 싶지만 현재 기술적으로 불가능해서 왜 안되는지에 대한 이유를 알려드리기 위해 적게 되었습니다. 구글STT는 Recording한 데이터를 가지고 서버에 보내서 해당 결과값을 받아 처리하게 되어있습니다. 이 과정에서 마이크 채널을 구글 STT가 점유하게 되는데 우리가 Recording을 하기 위해 AudioRecord나 MediaRecord를 쓸때도 마이크 채널을 씁니다. 즉 2개의 앱에서 마이크 채널을 사용하기 때문에 먼저 실행된 앱이 먼저 점유권을 가지에 되어 한쪽은 실행되고 다른 한쪽은 실행이 안되는 것입니다. 입력 공유에 대한 내용은 아래 사이트에서 확인하실 수 있습니다. developer.android.com/.. 2021. 4. 26. Android MVVM Example 프로젝트 안녕하세요. 오랜만에 글을 쓰게 되었습니다! 첫 직장을 1년동안 다니다 얼마전 퇴사하고 다시 블로그에 글을 쓰게 되었네요ㅎㅎ 안드로이드에서 MVVM에 대한 예시가 많은데 모양이 조금씩 다릅니다. 이번 포스팅에서는 제가 MVVM을 기반으로 한 프로젝트를 소개하려 합니다. 서버통신과 로컬디비를 기반으로 프로젝트를 구현했고 BindingAdapter를 이용해 뷰와의 디펜던시를 없앴습니다. 코드는 깃허브에 올려놓았습니다. github.com/ckdrb7017/MVVMDemo ckdrb7017/MVVMDemo Contribute to ckdrb7017/MVVMDemo development by creating an account on GitHub. github.com 2021. 4. 1. Android VerticalSeekBar 소개 안녕하세요. 이번엔 VerticalSeekBar를 만들어 놨던걸 공개하려고 합니다. 안드로이드에서는 VerticalSeekBar 를 제공하지 않아서 아마 rotation을 이용하여 많이 노력을 하셧을텐데 이마저도 굉장히 불편한 점이 많았습니다. 그래서 VerticalSeekBar 를 만들어 배포하게 되었습니다. ProgreeBar와 Background의 컬러를 변경가능하게 해두었고 Radius를 줄수 있게 해놓았습니다. 이 SeekBar는 Rotation을 돌려서 설정하기 때문에 width와 height의 개념이 서로 뒤바껴서 적용이 됩니다. 그래서 SeekBar의 width를 설정하려면 maxHeight 이 아니라 maxWidth를 주어야 합니다. VerticalSeekBar는 아래와 같이 사용하시면 .. 2020. 12. 30. 안드로이드 Retrofit 통신시 null로 들어올때 안녕하세요. 이번 포스팅은 Retrofit 통신할때 결과값은 잘 들어오는데 data class가 null로 들어오는 현상의 해결방법에 대해 알려드리려고 합니다. 분명 서버에서 리턴을 잘 받아왔음에도 data class 자체가 null로 들어오는 현상이 있는데 이는 프로가드의 코드축소 때문에 일어난 현상입니다. 코드축소시 data class 까지 날려버려서 그런데 가장 쉬운 해결방법은 @Keep data class HeaderPageData(val id : Int, val pageUrl:String, val imageUrl :String) 이렇게 Keep 어노테이션을 붙이는 것입니다. 또는 proguard-rules.pro 파일로 가셔서 직접 세팅을 하면 되는데 그 방법은 이전 포스팅을 참고하시면 되겠습니.. 2020. 12. 13. 이전 1 2 3 4 5 다음