To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부
Concept of Resources Providing Resources Accessing Resources Resource Types 2
지금까지우리가이미보아온, 사용한 res/ 디렉토리에관한것임 리소스란문자열 (string), 이미지, 아이 콘, 레이아웃등의외부 (external) 파일 들이다. 리소스는소스코드에서분리되어, 주로 XML 형태로관리되며, XML 은컴파일되 어 R 클래스로만들어진다. 프로그램에서는 R 클래스의 ID 를통해 해당리소스를액세스할수있다. 3
클래스 R 4
Two different devices, both using default resources. Two different devices, one using alternative resources 5
Concept of Resources Providing Resources Accessing Resources Resource Types 6
각종리소스는 res 의지정된서브디렉토리에위치시킨다. 7
8
9
10
11
애플리케이션은여러종류의디바이스를지원하고자한다. 예를들어, 다른종류의해상도에서동작할수있다. 다른언어환경에서동작할수있다. 애플리케이션실행시, 안드로이드는현재디바이스설정 (configuration) 에따라, 적절한리소스를로드한다. 12
여러리소스를설정하기위해서는 res/ 디렉토리에 <res_name>-<qualifier> 형태의디렉토리를만든다. <res_name>: 디폴트리소스의이름 <qualifier>: (device dependent 한 ) 개별리소스이름 영어와프랑스어의문자열리소스를 관리하는경우 디폴트이미지와고해상도이미지를 제공하는경우 13
14
15
16
17
18
19
20
21
여러 qualifiers 를대시 (-) 로구분하여사용할수있다. Example: drawable-en-rus-land/ Qualifier 는반드시 Table 2 의순서에따라나열되어야한다. Wrong: drawable-hdpi-port/ Correct: drawable-port-hdpi/ 리소스디렉토리가 nest 되어사용될수는없다. Wrong: res/drawable/drawable-en/ 대소문자가구분되지않는다 (case-insensitive). 하나의 qualifier type 에서는오직하나의값만이사용될수있다. Wrong: drawable-res-rfr/ Correct:drawable-rES/ res/ drawable-rfr/ 22
코드에서는복잡한 qualifier 를고려할필요없이, 간 단한형태로레퍼런스한다. 예를들어, 다음과같이명명된리소스가있다면 res/drawable-port-mdpi/myimage.png 아래와같이레퍼런스된다. R.drawable.myimage (in code) @drawable/myimage (in XML) 안드로이드가실행시최적의리소스를매치시켜준다. 23
안드로이드는디바이스의현재설정에기반하여런타 임에사용되는리소스를선택한다. 리소스선택설명을위해다음예제를사용한다. 24
1. 현재디바이스설정에반하는리소스파일을삭제한다. 2. Table 2 에서가장높은순위의 qualifier 를선택한다. (MCC 부터시작 ) 25
3. 해당 qualifier lf 를포함하는리소스디렉토리가있나? If No: 스텝 2 로돌아가서다음 qualifier 를검사한다. If Yes: 다음스텝 4 로진행한다. 4. 해당 qualifier 를포함하지않는리소스를제거한다. ( 예제 : language qualfier 포함하지않으면제거한다.) 26
5. 하나만남을때까지스텝 2-4 를반복한다. ( 예제 : Screen orientation 을고려하여제거한다.) 27
안드로이드가 Best Match Resource 를선택하는절차요약 28
Concept of Resources Providing Resources Accessing Resources Resource Types 29
ResourceAct.java 30
resact.xml strings.xml 31
main.xml UiPracticeFirst.java AndroidManifest.xml 32
33
컬러코드 #RGB, #ARGB, #RRGGBB, #AARRGGBB A: 알파채널 (0: 투명, 디폴트 = 불투명 ) 첫번째버튼을누를때마다색깔이변하도록코딩 34
ResourceAct.java 35
36
생성된리소스 (res/ ) 들은 R 클래스의리소스 ID 를통해액세스할수있다. 리소스를액세스하는두가지방법 In code: R 클래스의 static integer 로액세스한다. 예제 : R.string.hello In XML: @ 로시작하는특수 syntax 로액세스한다. 예제 : @string/hello 37
리소스 ID 를사용하여액세스한다. 38
Resources 의여러메소드를사용하여액세스한다. 39
지금까지 res/ 에서이미많이사용했다. 예제 : 다음리소스가 XML 로정의되었다하자. 40
다음과같이 layout 정의에서사용할수있다. 41
시스템에포함된리소스는애플리케이션에서도사 용이가능하다. 이들리소스는 android.r 클래스에정의되어있다. 42
시스템에정의된스타일사용예제 43
Concept of Resources Providing Resources Accessing Resources Resource Types Animation Color, Color State List Drawable String Dimension 44
Tween Animation i 주어진그래픽에대한회전 (rotating), 페이딩 (fading), 움직임 (moving), 확대 (stretching) 등의애니메이션을수행한다. 애니메이션내용은 XML 파일에정의 / 저장된다. Frame Animation ( 영화처럼 ) 일련의이미지들을순서에따라보여주는애니메이 션을수행한다. 마찬가지로, 애니메이션내용이 XML 파일에정의 / 저장된다. 45
기능 : 주어진그래픽에대한회전, 페이딩, 움직임, 확대등의애니메이션수행파일위치 : res/anim/filename.xml 파일이름 (filename) 은코드에서리소스 ID로사용됨 컴파일된리소스데이터타입 : Animation 에대한포인터 Animation myanim = AnimationUtils.loadAnimation(this, R.anim.filename); 46
47
<set> 다른애니메이션엘리먼트를포함하는컨테이너 하나의 AnimationSet 을표현한다. <alpha> 페이딩수행 하나의 AlphaAnimation 을표현한다. android:fromalpha 페이딩을시작하는투명도 (0: 투명, 1: 불투명 ) android:toalpha 페이딩을마치는투명도 <scale> 크기변경을수행 하나의 ScaleAnimation 을표현한다. android:fromxscale, android:toxscale 가로의시작 / 끝크기 android:fromyscale, android:toyscale 세로의시작 / 끝크기 android:pivotx, android:pivoty: 핀이꽂힌중심좌표 48
<translate> 수평 / 수직움직임제어 하나의 TranslateAnimation 을표현한다. android:fromxdelta, android:fromydelta 시작하는 X/Y 위치 android:toxdelta, android:toydelta 끝나는 X/Y 위치 <rotate> 회전수행 하나의 RorateAnimation 을표현한다. android:fromdegree, android:todegree 회전의시작 / 끝각도 android:pivotx, android:pivoty 회전중심에대한 X/Y 좌표 <Interpolator> 애니메이션 ( 가 ) 속도, 반복등제어 주요속성 : duration, startoffset, fillbefore, repeatcount 등 49
애니메이션이정의되는 XML 파일을작성한다. (1/2) 50
애니메이션이정의되는 XML 파일을작성한다. (2/2) 51
애니메이션을적용 / 시작할버튼을만든다. resact.xml 52
Java a 코드에서해당애니메이션을적용한다. ResourceAct.java 53
수행결과 54
기능 : 필름의롤처럼일련의이미지를순서대로제생 하는전통적인애니메이션 ( 포토액자기능 ) 파일위치 : res/anim/filename.xml 파일이름 (filename) 은코드에서리소스 ID 로사용됨 컴파일된리소스데이터타입 : AnimationDrawable 에대한포인터 AdminationDrawable frameanimation; 55
true: 한번만, false: 계속반복 지속시간 (milliseconds) 리소스 ( 대개이미지 ) 의위치 56
애니메이션이정의되는 XML 파일을작성한다. 57
애니메이션을시작할버튼을만든다. resact.xml 58
애니메이션을실행할액티비티를하나만든다. 59
Java a 코드에서해당애니메이션을적용한다. ResourceAct.java AndroidManifest.xml strings.xml 60
수행결과 61
Resource Types Animation Color, Color State List Drawable String Dimension 62
컬러값 :# #-AlphaRedGreen-Blue #RGB, #ARGB #RRGGBB, #AARRGGBB 파일위치 : res/values/colors.xml ( 파일이름무관 ) Syntax: <color name=color_name>#color_value</color> name>#color 정의된컬러이름사용 AdminationDrawable frameanimation; In Java: R.color.color_name In XML: @[package:]color/color_name 63
resact.xml opaque: 불투명한 translucent: 투명한 64
ResourceAct.java 65
66
오브젝트의상태에따라, 다른컬러를부여하고싶을때사용 파일위치 : res/color/filename.xml 파일이름 (filename) 은코드에서리소스 ID로사용됨 Syntax 67
resact.xml 68
clicked touched 69
Resource Types Animation Part 2 Color, Color State List Drawable String Dimension 70
71