0. 들어가며
이직한 회사에서 안드로이드 라이브러리를 만드는 업무를 맡게 되었다. 실은 안드로이드 안 해봤다. 자바는 적당히 해봤다고 생각했는데 이번에 사용하는 오픈소스 라이브러리 하나가 코틀린으로 되어있었다. 이렇게 된 이상 간단하게 만들어가며 적응을 좀 해보려고 한다는 것은 반은 맞는 말이고 실은 할거 없어서 하나 만들어보려고 했다.
1. 왜 popcat인가
이유는 진짜 간단하다. 이미지 2개만 터치 이벤트 넣으면 끝난다.
2. 구현
일단 popcat이미지 2개를 구했다.
그리고 입을 다물고 있는 이미지를 이미지뷰로 넣어 기본값으로 하고 배경은 검정색으로 만들었다.
저 화면은 이미 내가 전체 화면을 적용해놓은 상태인데 appbar와 맨 위에 상태 표시줄을 없애기 위해서는 thems.xml에 다음 코드를 추가했다.
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
배경을 검정색으로 만들기 위해 해당 activity의 layout xml코드의 최상위 layout에서 다음 속성을 추가한다.
android:background="#000000"
이제 이미지뷰가 터치될 때 이미지를 교체하는 코드를 작성해야 한다.
일단 아래 코드가 전체 코드다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var imageview:ImageView = findViewById(R.id.imageView)
imageview.setOnTouchListener(object : View.OnTouchListener{
@SuppressLint("ClickableViewAccessibility")
override fun onTouch(p0: View?, p1: MotionEvent?): Boolean {
if (p1 != null) {
if(p1.action == MotionEvent.ACTION_DOWN){
imageview.setImageResource(R.drawable.popcat2)
} else {
imageview.setImageResource(R.drawable.popcat1)
}
}
return true
}
})
}
자바 9인가 10부터 var를 사용할 수 있다고 듣긴 했는데 코틀린은 이미 존재했다.
변수 선언도 좀 특이했다.
var와 val이 존재했는데 var는 variable, val은 valuable로 변수와 상수 개념이다.
기존 언어들에서는 변수 선언할 때는 [데이터타입 변수이름] 이렇게 선언했는데 코틀린은 var 변수이름:데이터타입 으로 선언한다.
함수 인자로 들어갈 때도 변수이름: 데이터타입 으로 들어간다.
nullable옵션이 들어갈 수 있다. 변수 선언할 때 ?가 들어가면 nullable이고 아니면 null로 초기화하며 선언이 불가능하다.
imageview에서 setOnTouchListener를 호출해 터치가 되었을 때 리스너를 설정한다.
이때 파라미터에서 다시 View.OnTouchListener를 구현해주어야 한다.
onTouch를 구현하며 MotionEvent가 터치일 때는 입을 벌리는 이미지로 하고 아니면 입을 다물고 있는 이미지로 변경하게 만들었다.
3. 마치며
더 뭔가를 붙일까 아니면 여기서 멈추고 git에 올릴까 고민 중이다. 그리고 맥북이 있는데 swift랑 flutter로도 해보려고 한다.
'JAVA > android' 카테고리의 다른 글
view binding (0) | 2022.08.22 |
---|---|
Android os 4.4 TLS 1.2 support (0) | 2022.08.14 |