本文将介绍android的对话框在弹出和消失的过程中怎样使用动画效果,这里我采用的是自己定义的对话框,采用AlertDialog来加载,我们现在看看AlertDialog的类继承结构
java.lang.Object
↳ android.app.Dialog
↳ android.app.AlertDialog
从继承结构可以看出,AlertDialog不是View的子类,所以,就不能直接对该对象直接调用setAnimation()。但是,我们可以通过Window对象来为对话框设置动画。
具体的代码如下:
首先建立一个对话框的布局文件 exit_dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="500dp"
android:layout_height="200dp"
android:background="@drawable/dialog_bg"
>
<TextView
android:id="@+id/dialog_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="信息提示"
android:textSize="28sp"
android:gravity="center_horizontal"
/>
<TextView
android:id="@+id/dialog_msg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="下次开机是否自动进入此向导?"
android:textSize="33sp"
android:gravity="center_horizontal"
android:layout_below="@id/dialog_title"
android:layout_alignLeft="@id/dialog_title"
android:layout_marginTop="20dp"
/>
<Button
android:id="@+id/dialog_but1"
android:layout_width="120dp"
android:layout_height="60dp"
android:text="好的"
android:textSize="26sp"
android:layout_below="@id/dialog_msg"
android:layout_marginTop="30dp"
android:layout_marginLeft="87dp"
/>
<Button
android:id="@+id/dialog_but2"
android:layout_width="120dp"
android:layout_height="60dp"
android:text="不用了"
android:textSize="26sp"
android:layout_below="@id/dialog_msg"
android:layout_marginTop="30dp"
android:layout_toRightOf="@id/dialog_but1"
android:layout_marginLeft="100dp"
/>
</RelativeLayout>
为了对话框好看一点,我这里给它指定了一个背景图片,当然背景图片的有无不影响功能。
接下来,看看主程序是怎样调用的,下面是主Activity的代码。
package dxd.android.dialog_animation;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
public class Dialog_AnimationActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(KeyEvent.KEYCODE_BACK == keyCode){
showDialog();
}
return super.onKeyDown(keyCode, event);
}
public void showDialog(){
final AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.show();
Window win = dialog.getWindow();
win.setContentView(R.layout.exit_dialog_layout);
win.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) ;
// 就是在这里设置对话框的动画,
win.setWindowAnimations(R.style.dialogWindowAnim);
final Button but_yes = (Button)win.findViewById(R.id.dialog_but1);
final Button but_no = (Button)win.findViewById(R.id.dialog_but2);
but_yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
}
});
but_no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
}
});
}
}
我们可以看出,是获取对话框中的window对象来设置动画效果的。
对话框的用处在android开发中是用的非常多的,原生对话框不怎么好看,有时候需要自己写对话框+动画效果,就很好看了。
关于对话框的总结 见之前的总结:http://blog.csdn.net/android_dong/article/details/9299707