Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드에서 버튼을 화면의 무작위 위치에 표시하는 방법

이 예제는 안드로이드 앱에서 버튼을 화면의 무작위(랜덤) 위치에 표시하고, 일정한 간격으로 계속 이동시키는 방법을 보여줍니다. TimerView.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초마다 무작위 위치로 이동하는 것을 확인할 수 있습니다.

안드로이드에서 버튼을 화면의 무작위 위치에 표시하는 방법


안드로이드에서 버튼을 화면의 무작위 위치에 표시하는 방법

안드로이드에서 버튼을 화면의 무작위 위치에 표시하는 방법