카드를 이용한 애플리케이션에서 카드를 누르면 카드가 넘어가는 애니메이션이 들어가면서 카드가 뒤집히는 것을 볼 수 있습니다.
이때 사용되는 카드 뒤집기 애니메이션은 사용자 경험을 향상하는데 큰 역할을 할 수 있습니다.
그래서 오늘은 안드로이드 스튜디오에서 animate()를 이용한 카드 뒤집기 애니메이션을 만들어보도록 하도록 하겠습니다.
| 1. 카드 뒤집기 이미지 만들기
우선 카드 뒤집기 애니메이션을 만들기 전 카드의 앞면과 뒷면의 이미지가 필요하기 때문에 만들어주도록 합니다.
카드가 뒤집힐 때 이 앞면과 뒷면의 이미지의 크기가 같아야 하며 카드가 뒤집힐 때 서로 교체되어 보여야 합니다.
| 2. 카드 뒤집기 레이아웃 구성
이제 카드 뒤집기에 쓰일 imageView와 뒤집기를 실행시킬 버튼으로 이루어진 레이아웃을 구성해 줍니다.
//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/card_back2" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />
</androidx.constraintlayout.widget.ConstraintLayout>
| 3. 카드 뒤집기 코드 작성
이제 본격적으로 버튼을 눌렀을 때 imageView에 animate()를 이용하여 카드 이미지가 회전하는 듯한 애니메이션 효과를 부여하도록 할 것입니다.
//MainActivity.java
public class MainActivity extends AppCompatActivity {
Button button;
ImageView imageView;
int check = 0; // 뒷면
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
imageView = findViewById(R.id.imageView);
float scale = getApplicationContext().getResources().getDisplayMetrics().density;
//xml에서 쓰이는 dp단위에 쓰이는 곱하기 인자를 불러와 디스플레이에 대한 일반 정보 설명을 담고 있습니다.
float distance = imageView.getCameraDistance() * (scale + (scale / 2));
//이미지뷰가 회전할 때에 부분적으로 잘리는 것을 방지하기 위하여 카메라의 거리 값을 부여한 것입니다.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
imageView.setCameraDistance(distance);
imageView.animate().withLayer()
.rotationY(90)
.setDuration(150)
.withEndAction(new Runnable() {
@Override
public void run() {
if(check == 0){
//뒷면이였던 상태였으므로 카드 이미지 회전을 주고 card_front로 앞면 이미지를 띄움
imageView.setImageResource(R.drawable.card_front);
check = 1;
}else if(check == 1){
//앞면이였던 상태였으므로 카드 이미지 회전을 주고 card_back로 뒷면 이미지를 띄움
imageView.setImageResource(R.drawable.card_back);
check = 0;
}
imageView.setRotationY(-90);
imageView.animate().withLayer()
.rotationY(0)
.setDuration(250)
.start();
}
}).start();
}
});
}
}
float scale = getApplicationContext().getResource().getDisplayMetrics().density;에서
xml에서 쓰이는 dp 단위에 쓰이는 곱하기 인자를 불러와 디스플레이에 대한 일반 정보 설명을 담고 있습니다.
float distance = imageView.getCameraDistance()*(scale+(scale/2));에서는
이미지 뷰가 회전할 때에 부분적으로 잘리는 것을 방지하기 위하여 카메라의 거리 값을 부여한 것입니다.
animate().withLayer().rotationY(값)을 이용하여 카드를 회전시키고 .withEndAction()을 이용해 카드 이미지가 회전을 마무리했을 때 실행할 코드를 작성하여 상황에 따른 카드 이미지를 띄워주시면 됩니다.
그리고 button.setOnClickListener(---)를 이용하여 애니메이션을 시작하기 때문에
뒤집기 버튼을 추가하고, 버튼을 클릭했을 때 애니메이션이 시작하도록 코드를 작성해 줍니다.
'안드로이드 스튜디오 앱 개발 > 실제 앱 개발 과정' 카테고리의 다른 글
[Android Studio] 안드로이드 스튜디오 어댑터(Adapter)에 int형 값을 addItem 하는 방법과 예제 알아보기 (0) | 2023.07.03 |
---|---|
[Android Studio] 아이템 값 중복검사 for 문을 이용하여 쉽게 하는 방법 알아보기 (0) | 2023.07.02 |
안드로이드 스튜디오 앱 아이콘 만들기 [Android Studio] (1) | 2023.06.27 |
안드로이드 스튜디오 뒤로가기 버튼 막기 및 2번 클릭시 종료하기 onBackPressed() [Android Studio] (0) | 2023.06.23 |
안드로이드 스튜디오 EditText 글자 수 제한, 미리 보기, 길이 고정하기[Android Studio] (0) | 2023.06.18 |