https://youtu.be/i22jxmIh_EE

10분정도 길이이며 아주 쉽게 기본개념을 이해할수 있다.

ViewModel은 activity, fragment의 lifecycle 변화에 제한 받지않고 destroy이 될때까지 그 data 값이 유지 될수 있도록 한다.

LiveData는 ViewModel 하부의 observe()를 이용해 data값이 변화하면 즉시 ui에 갱신되도록 한다.

https://youtu.be/lcAtXpyn6DY 

Bound service를 공부하다 LiveData를 처음 알게 되었다. 큰 개요를 설명하는 10분길이 동영상. MVVM을 사용하지 않던 동안에 흔히 발생하는 문제점, MVVM 사용의 장점에 대해 설명한다.  

이 동영상 유튜버가 설명하는 MVVM 개발 튜토리얼

https://youtu.be/ijXjCtCXcN4

original source : https://youtu.be/zBO_0_7huVA

이 강의는 custom view에서 어떻게 scroll을 내부적으로 처리하는지를 설명하고 있다.

ScrollBar를 보이기 위해서는 view의 android:scrollbars에 vertical 또는 horizontal을 입력한다.

아래 코드를 설명하면

GestureDetector를 이용해서 사용자의 scroll을 감지하면 onScroll()이 호출된다. scrollBy()를 통해 특정 이동만큼 view을 이동하고 invalidate()를 통해 다시 그린다. 

=========================================================

.

.

=========================================================

.

.

위와 같이 매번 scrollbars 항목을 지정하기 귀찮다면 아래와 같이 theme으로 지정하여 사용할수도 있다.

=========================================================

.

.

아래그림은 EdgeEffect의 예시를 보여주고 있다.

=========================================================

.

.

=========================================================

.

.

ClipData는 안드로이드에서 다른 앱에 ClipBoard나 drag and drop을 통해 전달될 정보를 가지는 class이다.

original source : https://youtu.be/nMP6fDNtbfY

image

Drawable obj는 내부에 getIntrinsicHeight(), getIntrinsicWidth() 함수들을 구현해서 외부에서 이 함수를 호출했을때 Drawable이 실제 그려지는 부분의 크기를 되돌린다.

Drawable obj는 내부에 setLevel(), setState() 함수들을 구현해서 각 level, state에 맞게 drawable obj가 행동하도록 만든다.

Drawable.Callback interface는 invalidateDrawable(),scheduleDrawable(),unscheduleDrawable()들을 구현해야 한다. 참조) https://developer.android.com/reference/android/graphics/drawable/Drawable.Callback

image
image

=========================================================

.

.

아래는 custom view내부에서 drawable을 사용하는 경우를 보여주고 있다

image

=========================================================

.

.

Drawable 자체를 만드는 과정

image
image
image

=========================================================

.

.

image

개발자가 새로운 Layout을 만들고 그 안에서 새로누 LayoutParams를 만들어 사용하는 경우 Layout class 안에 generatedLayouParams(), generateDefaultLayoutParams(), checkLayoutParams()를 구현해 주어야 한다.

image

original source : https://youtu.be/8UP9JFSNl1U

이 강의에서 예제 코드는 image 와 text를 같이 보여주는 compound view를 구현한다.

merge를 통해 설정하지 못한 속성을 아래와 같이 해서 구현한다.