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

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

original source : https://youtu.be/1OSuBFIbUcM

layoutparams 는 gridlayout 안에 itemview에 적용되는 layout params이다.

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

.

.

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

.

.

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

.

.

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

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

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

.

.

layout_weight은 남은 여백을 어떤 비율로 나눌것인가에 대한 값이다. 실제 view의 크기 비율을 조절하고 싶다면 view의 크기값을 0으로 준다.

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

.

.

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

.

.

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

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

.

.

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

.

.

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

.

.

Window 

window는 불투명 사각형이다. application은 window manager에 요청해서 window를 얻을수 있다. 각 window는 하나의 surface를 가진다. application은 주어진 surface에 자기 원하는 것을 자유롭게 그릴수 있다.

Surface

surface는 screen을 구성할 pixel들을 가지고 있는 obj이다. 각각의 window (dialog, status bar, 개발자가 만든 full screen activity)는 각자의 surface를 가지고 있다. 보통 surface는 하나이상의 buffer를 가진다.(보통은 두개) 두개의 buffer를 가지고 있는 경우 SurfaceFliger가 현재화면을 조합해서 만드는 동안 다음 화면에 그려질 화면 모양을 예비 buffer에 보관함으로써 다음 화면 출력을 대비하게 된다.

SurfaceFlinger

SurfaceFlinger는 각각의 surface들를 최종적으로 올바른 z-order따라 합쳐그린다.

View

view는 window안에 있는 interactive UI element이다. window는 하나의 view hierarchy를 가진다. 언제든 window가 다시 그려져야 한다면 (예를 들어 어떤 view가 invalidate된 경우) surface는 locked 되고 canvas를 return한다. hierarchy를 따라 canvas는 각각의 view를 거치게 된다. view들은 각자 순서에 각자 필요한 부분을 canvas에 그리게 된다. (정확히 말하면 canvas를 이용해서 surface에 연결된 bitmap에 그린다.) 이 과정을 마치면 surface를 unlocked 그리고 posted 된다. 이렇게 완성된 buffer는 foreground와 swap되고 SurfaceFlinger에 의해 조합되서 출력된다. 

Bitmap

pixel data에 대한 interface이다. 여기서 말하는 pixel data는 Bitmap 자신이 가지고 있는 pixel data인 경우도 있지만 Bitmap가 가지고 있지 않는 다른 pixel data일수도 있다. drawing을 위해 surface와 canvas가 내부적을 연결된 경우가 그 예가 될수 있다.  (canvas는 surface에 직접 그리지 않는다. canvas는 bitmap 이나 open GL container에 그린다. bitmap이 만들어지고 current drawing buffer of the Surface에 연결되면 canvas는 bitmap에 그리게 된다.)