open coding Show 2021. 1. 6. 23:15 단위시간당 회전한 각도 값을 측정하는 센서. : 회전속도 측정. 주로 수평유지장치에 사용되고 있음. ........................................................ 1.센서data받기 listener 다른거랑 비슷 : type을 Gyroscope로 설정하는거임. 2. Manifest : screenOrientation="portrait" 스마트폰 회전해서 측정하니, 스마트폰 화면 고정해야겠지 .............................................................................................................................................. <Manifest> screenOrientation="portrait"
<MainActivity>
'open coding' Related Articles휴대폰이 움직이는 방향에 따라 ImageView가 움직일 수 있는 간단한 방법을 공유해보려고 한다. 해당 영상은 아래와 같은 조건을 가지고 있다. Sensor Manager 설정하기토마토뷰를 움직이려면 휴대폰을 기울일 때 변경되는 x,y 좌표값이 필요한데, 좌표값을 감지하기 위해 가속도 센서가 필요하다.
fyi, 가속도 센서외에 다양한 센서 기능을 지원하고 있는데, 사용하고 있는 휴대폰이 특정 센서를 지원하지 않을 수 있으니 자세히 확인해보길 바란다! (예시로, 나의 테스트폰의 경우 가속도 센서는 지원하지만 중력 센서는 지원하지 않는다.) x, y, z값은 아래와 같이 변경된다.
화면 터치 시 토마토 뷰 만들기토마토뷰의 크기는 가로, 세로 동일하게 140 * 140 으로 만들었다.
이 때 토마토뷰가 생성되는 x,y 좌표는 이미지뷰는 사용자가 터치한 좌표가 왼쪽 최상단 기준으로 레이아웃에 addView 된다. 즉 위 사진처럼, 유저가 클릭한 곳이 기준점인 (0,0) 이라면 기준점 기준으로 오른쪽 아래에 이미지뷰가 그려질 것이다. 하지만 유저는 화면을 터치했을 때, 토마토뷰가 오른쪽 아래에 생성되는 것이 아닌, 기준점자체 에 만들어지기를 기대할 것이다. (유저가 터치한 곳 가운데에 토마토뷰가 생성되어야 하고, 곧 그 좌표는 토마토뷰의 웃는 곳일 것이다.) 이렇게, 가운데에 토마토뷰를 생성하기 위해서 유저가 터치한 곳의 x, y 좌표에 TOMATO_SIZE / 2 토마토 모델 생성
x, y값이 변경될 때 뷰 움직이기
가속도 센서 값은 SensorEventListener 를
override 하고, 값이 변경될 때마다
event.values 를 통해 가속도 센서의 x, y, z 값을 가져올 수 있고, speed 만큼 곱해 토마토뷰의 움직이는 속도를 설정할 수 있다.
센서 값이 변경될 때마다 토마토뷰의 x, y 값을 변경한다.
그리고, x, y 값이 화면 영역을 벗어나는 범위라면 0 혹은 레이아웃의 가로, 세로에 고정할 수 있도록 한다. 하지만 단순히 디바이스의 세로 사이즈를 가져오게되는 경우 문제가 생길 수 있는데, status bar, navigation bar 를 포함한 사이즈를 가져오기 때문에 토마토뷰가 화면 영역에 벗어나게 될 수 있다. 그래서 system bar 영역을 제외한 순수 화면의 세로크기가 필요하다.
그래서 나의 경우, inset 값을 이용해 순수 화면의 크기만을 가져올 수 있도록 구성했다. 이 때 코드를 자세히 살펴보면 샘플 코드 : https://github.com/jsh-me/AndoridFallingView |