안드로이드(Android) 다이얼로그(Dialog) Animation 효과 넣는 방법 |
환경: Eclipse Mars, Android 4.2.2 |
안드로이드에서 다이얼로그(Dialog) 를 서서히 뜨게 하거나 오른쪽으로 사라지게 하는 등의 애니메이션 효과를 적용하는 방법에 대해 알아 보겠습니다. 여기에서 사용하는 옵션값들을 잘 활용하시면 좀 더 화려하게 동작을 하는 어플을 만들 수 있습니다.
▼ 먼저 애니메이션 효과를 적용하기 위해서는 XML 작업을 해야 합니다. style.xml 내부에 아래 소스를 복사합니다. 소스에서는 style name 을 셋팅하게 됩니다. PauseDialogAnimation 에는 두개의 item 값이 있죠. 첫번째 windowEnterAnimation 은 적용한 위젯이 시작될 때 적용됩니다. 세부 설정값은 @anim/fadein 에 있겠죠. 두 번째 windowExitAnimation 은 위젯이 사라질 때 설정입니다. @android:anim/slide_out_right 은 안드로이드에서 제공하는 설정값으로 사라질 때 화면 오른쪽으로 이동하게 됩니다.
styles.xml
<style name="PauseDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> </style> <style name="PauseDialogAnimation"> <item name="android:windowEnterAnimation">@anim/fadein</item> <item name="android:windowExitAnimation">@android:anim/slide_out_right</item> </style>
▼ windowEnterAnimation 에 적용한 XML 의 내용입니다. 위젯이 시작될 때 적용되는 값들이며 duration 에 값은 2초 입니다. Alpha 값이 0 ~ 1 이므로 2초동안 흐려졌다가 서서히 나타나게 되는 것이죠.
fadein.xml
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />
▼ 이번에는 아래 XML 대신 @android:anim/slide_out_right 사용했습니다. 화면이 종료될 때 사용하시면 되겠죠.
fadeout.xml
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/anticipate_interpolator" android:fromAlpha="1" android:toAlpha="0" android:duration="1000" />
▼ 이렇게 애니메이션 효과를 적용하기 위해 만든 XML 들을 반영해야 겠죠. 반영을 위해서는 Dialog 클래스에 기본적으로 제공되는 windowAnimations 속성값에 style name 값을 넣으시면 됩니다.
// 다이얼로그 생성 AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;
▼ 아래는 애니메이션 효과를 적용한 AlertDialog 다이얼로그 전체 Activity 소스 입니다. 애니메이션 효과는 XML 만 잘 만들어 두시면 어느 위젯이든 재사용이 가능합니다. 위젯에는 기본적으로 windowAnimations 속성값이 다 있기 때문입니다.
import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class AlertDialogActivity extends Activity implements OnClickListener { final Context context = this; private Button button; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alert_dialog); button = (Button) findViewById(R.id.btn_alert); // 클릭 이벤트 button.setOnClickListener(this); } public void onClick(View v) { switch (v.getId()) { case R.id.btn_alert: AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( context); // 제목셋팅 alertDialogBuilder.setTitle("프로그램 안내"); // key 셋팅 alertDialogBuilder .setOnKeyListener(new DialogInterface.OnKeyListener() { public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { finish(); dialog.dismiss(); return true; } return false; } }); // AlertDialog 셋팅 alertDialogBuilder .setMessage("공지사항 내용표현") .setCancelable(false) .setPositiveButton("종료", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int id) { // 프로그램을 종료한다 AlertDialogActivity.this.finish(); } }) .setNegativeButton("취소", new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialog, int id) { // 다이얼로그를 취소한다 dialog.cancel(); } }); // 다이얼로그 생성 AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; // 다이얼로그 보여주기 alertDialog.show(); break; default: break; } } }
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) 이미지 드래그 앤 드랍(Drag and Drop) 하는 방법 (3) | 2019.12.01 |
---|---|
안드로이드(Android) ImageView 사이즈(size) 조절하는 방법 (1) | 2019.11.11 |
안드로이드(Android) 가로 세로 모드 자동회전 고정하는 방법 (0) | 2019.10.30 |
안드로이드(Android) 사용자정의 진행 다이얼로그(Custom Progress Dialog) 만드는 방법 (5) | 2019.10.28 |
안드로이드(Android) Theme.dialog 로 Activity 화면을 팝업(dialog) 만드는 방법 (0) | 2019.10.27 |
안드로이드(Android) 다이얼로그(Dialog) 키보드 Back key 눌렀을 때 종료하는 방법 (0) | 2019.10.26 |
안드로이드(Android) 기본 알림창인 AlertDialog 에 ListView 표현하는 방법 (3) | 2019.10.26 |
안드로이드(Android) 기본 알림창 AlertDialog 에서 선택 목록창과 옵션창 띄우기 (0) | 2019.10.25 |