Google deveopler - Starter Code
👆 이 링크에서 프로젝트의 기본 틀을 클론할 수 있다. 클론 후 주어진 조건에 따라 코드를 완성해보자.
4가지 state가 있다. 처음 앱은 SELECT 상태로 시작된다.
SELECT 상태에서 이미지를 클릭하면, SQUEEZE 화면으로 바뀌고, squeezeCount가 0으로 초기화되고, lemonSize가 2~4 사이 랜덤 숫자로 지정된다.
SQUEEZE 상태에서 이미지를 클릭하면, 클릭할 때 마다. squeezeCount는 +1, lemonSize는 -1이 되어, lemonSize가 0이 되는 순간 DRINK 상태로 전환한다.
DRINK 상태에서 이미지를 클릭하면 RESTART 상태로 전환하고, lemonSize=-1이 된다.
RESTART 상태에서 이미지를 클릭하면 SELECT로 돌아간다.
lemonImage!!.setOnClickListener {
// TODO: call the method that handles the state when the image is clicked
clickLemonImage()
}
중앙의 이미지를 클릭할 때마다 setOnClickListener
가 실행된다. 여기서 clickLemonImage()
함수를 호출한다.
private fun clickLemonImage() {
if(lemonadeState==SELECT){
lemonadeState=SQUEEZE
setViewElements()
lemonSize = lemonTree.pick()
squeezeCount=0
}else if(lemonadeState==SQUEEZE){
squeezeCount++
lemonSize--
if(lemonSize==0) {
lemonadeState = DRINK
setViewElements()
}
}else if(lemonadeState==DRINK){
lemonadeState=RESTART
setViewElements()
lemonSize=-1
}else if(lemonadeState==RESTART){
lemonadeState=SELECT
setViewElements()
}
}
clickLemonImage()
함수에서는 문제에서 주어진 조건을 작성했다. SELECT만 보면, lemonadeState=SQUEEZE
로 상태를 SQUEEZE로 변경하고, setViewElements()
를 호출해 이미지를 변경하고, lemonSize
를 pick()
함수를 호출해 랜덤 수를 지정하고, sqeezeCount
를 0으로 초기화한다.
setViewElements()
는 다음과 같다.
private fun setViewElements() {
// TextView 와 ImageView 를 findViewById로 찾기
val textAction: TextView = findViewById(R.id.text_action)
val imageAction: ImageView = findViewById(R.id.image_lemon_state)
val newText = when (lemonadeState) {
SELECT -> resources.getString(R.string.lemon_select)
SQUEEZE -> resources.getString(R.string.lemon_squeeze)
DRINK -> resources.getString(R.string.lemon_drink)
else -> resources.getString(R.string.lemon_empty_glass)
}
// 화면의 텍스트 변경
textAction.setText(newText)
// newImageResource에 lemonadeState에 대응하는 이미지 리소스 담기
val newImageResource = when (lemonadeState) {
SELECT -> R.drawable.lemon_tree
SQUEEZE -> R.drawable.lemon_squeeze
DRINK -> R.drawable.lemon_drink
else -> R.drawable.lemon_restart
}
// 화면의 이미지 변경
imageAction.setImageResource(newImageResource)
}
val submitText = getResources().getString(R.string.submit_label)
강의에서 string.xml에 있는 resource에 이렇게 액세스 하라는데, 에러가 난다. 🤔
resources.getString(R.string.lemon_select)
대신 이렇게는 된다.
getString(R.string.lemon_select)
단순히 getString만 사용하는 것도 가능한 것 같다.
강의에서 기본적으로 제공하는 테스트 코드가 있다.
전체 코드를 run 하면 어플이 우다다다 실행되었다 꺼졌다를 반복하며 테스트가 진행된다.
실행이 완료되면 초록 체크 표시를 확인할 수 있다.