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

안드로이드에서 중심점을 기준으로 이미지 스케일(확대·축소) 애니메이션 구현하기

이 튜토리얼에서는 안드로이드(Android)에서 중심점(center point)을 기준으로 이미지가 확대되는 스케일 애니메이션을 구현하는 방법을 단계별로 알아봅니다. 버튼을 클릭하면 화면 중앙을 기준으로 이미지가 점점 커지며 나타나는 줌(Zoom) 효과를 만들 수 있습니다.

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:layout_height = "match_parent">
   <Button
      android:id = "@+id/button"
      android:layout_centerHorizontal = "true"
      android:layout_marginTop = "100dp"
      android:layout_width = "150dp"
      android:text = "Click"
      android:layout_height = "wrap_content"/>
   <ImageView
      android:id = "@+id/imageView"
      android:src = "@mipmap/ic_launcher_round"
      android:layout_width = "match_parent"
      android:layout_height = "match_parent" />
</RelativeLayout>

위 코드에는 버튼 하나와 ImageView 하나가 배치되어 있습니다. 이 버튼은 클릭 시 이미지 스케일링(줌) 애니메이션을 실행하는 역할을 합니다.

3단계 — MainActivity 작성

src/MainActivity.java 파일에 아래 코드를 추가합니다.

package com.example.andy.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
   ImageView view;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      view = findViewById(R.id.imageView);
      view.setVisibility(View.INVISIBLE);
      findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            ScaleAnimation fade_in = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            fade_in.setDuration(1000);
            fade_in.setFillAfter(true);
            view.startAnimation(fade_in);
         }
      });
   }
}

핵심 코드 살펴보기

사용자가 버튼을 클릭하면 아래 코드를 통해 이미지 스케일링 애니메이션이 실행됩니다.

ScaleAnimation fade_in = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
fade_in.setDuration(1000);
fade_in.setFillAfter(true);
view.startAnimation(fade_in);

여기서 각 파라미터의 의미는 다음과 같습니다.

  • (0f, 1f, 0f, 1f) : X축과 Y축 방향으로 크기가 0에서 1까지 변하며, 즉 아무것도 없는 상태에서 원래 크기까지 확대됩니다.
  • Animation.RELATIVE_TO_SELF, 0.5f : 애니메이션의 기준점(pivot)을 뷰 자신의 가로·세로 50% 위치, 즉 정중앙으로 지정합니다. 이 값 덕분에 이미지가 한쪽으로 치우치지 않고 중심을 기준으로 균형 있게 확대됩니다.
  • setDuration(1000) : 애니메이션 지속 시간을 1000밀리초(1초)로 설정합니다.
  • setFillAfter(true) : 애니메이션이 끝난 후에도 마지막 상태를 그대로 유지하도록 합니다.

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 열고 툴바의 Run 아이콘을 클릭하세요. 목록에서 자신의 모바일 기기를 선택하면, 기본 화면이 다음과 같이 표시됩니다.

안드로이드에서 중심점을 기준으로 이미지 스케일(확대·축소) 애니메이션 구현하기

위 화면에는 버튼이 하나 있습니다. 사용자가 이 버튼을 클릭하면 아래와 같이 이미지가 중심을 기준으로 점점 확대되는 줌 효과와 함께 나타납니다.

안드로이드에서 중심점을 기준으로 이미지 스케일(확대·축소) 애니메이션 구현하기