이 예제는 안드로이드 앱에서 버튼을 화면의 무작위(랜덤) 위치에 표시하고, 일정한 간격으로 계속 이동시키는 방법을 보여줍니다. Timer와 View.animate() 메서드를 활용하면 비교적 간단하게 구현할 수 있습니다.
1단계 — 새 프로젝트 생성
Android Studio에서 File ⇒ New Project 메뉴로 이동한 뒤, 새 프로젝트 생성에 필요한 모든 세부 정보를 입력하여 프로젝트를 만듭니다.
2단계 — 레이아웃 구성
res/layout/activity_main.xml 파일에 다음 코드를 추가합니다.
<?xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android" android:orientation = "vertical" android:layout_width = "match_parent" android:layout_height = "match_parent"> <Button android:id = "@+id/my_button" android:layout_width = "100dp" android:layout_height = "wrap_content" android:layout_x = "0dp" android:layout_y = "0dp" android:text = "Yes" /> </LinearLayout>
위 코드에서는 화면의 무작위 위치로 이동시킬 버튼 하나를 배치했습니다.
3단계 — MainActivity 코드 작성
src/MainActivity.java 파일에 다음 코드를 추가합니다.
package com.example.myapplication;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.DisplayMetrics;
import android.widget.Button;
import android.widget.LinearLayout;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = (Button) findViewById(R.id.my_button);
final DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Random R = new Random();
final float dx = R.nextFloat() * displaymetrics.widthPixels;
final float dy = R.nextFloat() * displaymetrics.heightPixels;
final Timer timer = new Timer();
button.animate()
.x(dx)
.y(dy)
.setDuration(0)
.start();
}
});
}
}, 0, 1000);
}
}코드 동작 원리
먼저 DisplayMetrics로 기기 화면의 전체 크기를 가져옵니다. 그다음 Timer가 1초(1000ms)마다 실행되며, Random 객체로 생성한 x, y 좌표를 계산해 animate() 메서드로 버튼을 해당 위치로 이동시킵니다. 이때 UI 변경 작업은 반드시 runOnUiThread() 내부에서 처리해야 한다는 점에 유의하세요.
참고: 위 예제는 구버전 Support Library(android.support.v4)를 사용합니다. 최신 프로젝트라면 androidx.fragment.app.FragmentActivity로 교체하고, 가능하다면 DisplayMetrics 대신 WindowMetrics API를 사용하는 것이 좋습니다.
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하고, 옵션 목록에서 자신의 모바일 기기를 선택하세요. 그러면 기기 화면에서 버튼이 1초마다 무작위 위치로 이동하는 것을 확인할 수 있습니다.


