안드로이드에서 텍스트뷰 깜박임 애니메이션 구현하기
이 튜토리얼에서는 안드로이드 앱에서 텍스트뷰(TextView)가 깜박이는 효과를 구현하는 방법을 단계별로 살펴보겠습니다. 깜박임 효과는 Handler와 Thread를 활용해 일정한 시간 간격으로 뷰의 가시성(visibility)을 전환하는 방식으로 비교적 간단하게 만들 수 있습니다.
1단계 — 새 프로젝트 생성
Android Studio를 열고 File ⇒ New Project를 선택한 후, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.
2단계 — 레이아웃 파일 작성
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.
<?xml version = "1.0" encoding = "utf-8"?> <RelativeLayout xmlns:android = "https://schemas.android.com/apk/res/android" xmlns:tools = "https://schemas.android.com/tools" android:layout_width = "match_parent" android:gravity = "center" android:layout_height = "match_parent"> <TextView android:id = "@+id/text" android:textSize = "20dp" android:textAlignment = "center" android:layout_width = "match_parent" android:text = "Text blinking animation" android:layout_height = "wrap_content" /> </RelativeLayout>
위 코드에서는 깜박임 애니메이션을 보여줄 텍스트뷰 하나를 화면 중앙에 배치했습니다.
3단계 — MainActivity 작성
src/MainActivity.java 파일에 다음 코드를 추가합니다.
package com.example.andy.myapplication;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
blinkTextView();
}
private void blinkTextView() {
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
int timeToBlink = 1000;
try{Thread.sleep(timeToBlink);}catch (Exception e) {}
handler.post(new Runnable() {
@Override
public void run() {
TextView txt = findViewById(R.id.text);
if(txt.getVisibility() == View.VISIBLE){
txt.setVisibility(View.INVISIBLE);
} else {
txt.setVisibility(View.VISIBLE);
}
blinkTextView();
}
});
}
}).start();
}
}깜박임 애니메이션의 동작 원리
텍스트뷰에 깜박임 효과를 적용하는 핵심 메서드는 다음과 같습니다.
private void blinkTextView() {
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
int timeToBlink = 1000;
try{Thread.sleep(timeToBlink);}catch (Exception e) {}
handler.post(new Runnable() {
@Override
public void run() {
TextView txt = findViewById(R.id.text);
if(txt.getVisibility() == View.VISIBLE) {
txt.setVisibility(View.INVISIBLE);
} else {
txt.setVisibility(View.VISIBLE);
}
blinkTextView();
}
});
}
}).start();
}이 코드의 동작 흐름을 정리하면 다음과 같습니다.
- Handler 생성 — 백그라운드 스레드에서 UI 스레드로 작업을 전달하기 위해 사용됩니다.
- 1초 대기 — 별도의 스레드에서 1000밀리초(1초) 동안 sleep하여 깜박임 주기를 조절합니다.
- 가시성 전환 — handler.post()를 통해 UI 스레드에서 텍스트뷰의 현재 상태를 확인한 뒤, VISIBLE이면 INVISIBLE로, 그 반대라면 VISIBLE로 변경합니다.
- 반복 호출 — blinkTextView()를 다시 호출하여 애니메이션이 계속 반복되도록 만듭니다.
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 후, 툴바의 Run 아이콘을 클릭하세요. 기기 목록에서 본인의 모바일 기기를 선택하면 해당 기기 화면에 결과가 표시됩니다.

실행 결과에서 확인할 수 있듯이, 뷰를 보였다가 숨기는 방식으로 텍스트뷰가 1초 간격으로 깜박이는 것을 볼 수 있습니다.