[안드로이드 프로그래밍] 방탈출 게임 2. 불 켜고 끄는 스위치 만들기

     

일단 새까만 그림을 준비한다. 크기는 상관없다. 작아도 됨



이렇게..


그다음 이미지 뷰로 추가한다.




추가한 다음 방을 덮어버릴 크기로 키우면 된다. 사진을 늘릴때 자기 마음대로 안커지고 빈공간이 생길 수 있다. 이럴때는 속성에서 scaletype을 fitXY로 하면 된다. 아래 소스 참조.

중요한 것은 id 설정이다. 이미지뷰의 id를 알아야 보이고 안보이고를 설정할 수 있다.




id를 light라고 지정했다.




까매서 너무 안보인다. 사알~짝 보이길 원하는 사람은 알파값을 조금 수정하면 된다.




알파 값을 0.5로 하면 저정도로 보인다. 알파는 0~1사이의 float값이 들어간다. 0에 가까울 수록 투명이다.


이제 스위치를 만들어 보겠다. 





저 버튼이 스위치다. id와 클릭 속성들을 추가하고, 함수 이름은 turn이다. 이제 버튼을 누를때마다 자바에 있는 turn 함수가 실행된다.



자바에 추가한 turn 함수다.

일단 버튼을 누르면 누른 버튼이 View v에 들어가지만 우린 버튼을 누른게 중요하지 버튼이 중요한게 아니다. 제발 책보고 v.getId()같은거 하지마라. 배끼는 것보다 이해하는게 중요하다.


버튼이 어떻게 생겨먹은건 중요하지 않고 우린 버튼을 눌렀을 때 아까 정한 light 이미지가 보여지는지 안보여지는만 중요하다. 따라서 필요한건 light 이미지다. 이미지뷰를 선언하고 lightImage라는 이미지뷰에다가 light라는 id를 갖는 이미지를 대입한다. 이제 lightImage변수는 light라는 id를 갖는 이미지뷰를 나타낸다.


이미지가 보이고 안보이고는 어떻게 판단할까? 이미지뷰에 수많은 메소드가 있는데 그중 getVisibility()라는 메소드를 사용한다. 이 메소드는 그림의 상태에 따라 View.VISIBLE, View.INVISIBLE, View.GONE 이라는 3가지 상태를 출력한다. 즉 그림이 보여지고 있으면 View.VISIBLE을 출력하고 그림이 안보이면 View.INVISIBLE, 그림이 아에 레이아웃에서 사라졌으면 GONE을 나타낸다. INVISIBLE이랑 GONE의 차이는 INVISIBLE은 안보이는 것 뿐이지 실제로는 화면에 존재하는 것이고 GONE은 화면에서 없어져버린다.


if문을 통해서 lightImage.getVisibliity()가 어떤 값을 나타내는지 확인하고, 보이는 상태면 안보이게, 안보이는 상태면 보이게 하면 된다. 상태를 변화시키는 메소드는 setVisibility(원하는상태)이다. 코드를 보면 이해 할 수 있을 것이다.


실행해보면 잘돌아가는것을 알 수 있다. else if(lightImage.getVisibility() == View.INVISIBLE)의 경우 그냥 else로 바꿔도 되지만 이해를 돕기위해 풀코드를 작성하였다. 

반응형

댓글

Designed by JB FACTORY