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를 통해 설정하지 못한 속성을 아래와 같이 해서 구현한다.

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

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

.

.

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

.

.

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

.

.

CENTER_CROP을 가장 많이 사용하며 최초이미지가 크면 가운데를 기준으로 꽉찬 상태를 유지하며 줄인거나 꽉찬 상태를 유지하며 늘린다.

CENTER_INSIDE 최초이미지가 크면 가운데를 기준으로 줄이면서

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

imeOptions은 singleLine이 true인 경우에만 적용된다.

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

.

.

activity안에 있는 EditText를 선택한 경우 나오는 soft keyboard에 대한 설정을 보여주고 있다.

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

.

.

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

.

.

soft keyboard가 등장함으로써 주어야하는 layout의 변경을 기본적으로 AndroidManifest의 window soft input mode 설정을 통해 구현할수 있다.

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

.

.

nextFocusDown에서 다음 포커스가 이동할 view의 아이디를 생성 설정한다.  @+id를 주의 해서 볼것.

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

.

.

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

.

.

실시간 사용자 입력값을 얻기위해서는 EditText의 getText()를 이용하지 않고 TextWatcher를 사용한다.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

아래는 ratingbar 이미지 교체에 대한 설명이다. <layer-list>로 만든 drawable과 이를 사용하고 있는 <selector>에 주의해서 볼것

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

.

.

orginal source : https://youtu.be/yaeBev0uQvQ

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.