由于android的对话框不是一个View所以它没有setAnimation()这个方法,上网找了很多资料,好多都说的不完整或是抄人家的文章代码,这里我将我的理解总结如下,以后用到这方面的知识的时候以便查阅。
这里要实现一个自定义的对话框,在弹出和消失的过程中使用动画,这样用户的使用体验要好一点。还是先来总结一下需要用到的类:
AlertDialog:提示框
Window:这个类太强大了,现在我还啃不动它
上代码! 主Activity的代码
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 UserGuideActivity 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(keyCode == KeyEvent.KEYCODE_BACK){
final AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.show();
// 用Window类来设置对话框的布局文件
Window win = dialog.getWindow();
win.setContentView(R.layout.exit_dialog_layout);
win.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) ;// 显示对话框时,后面的Activity不变暗,可选操作。
win.setWindowAnimations(R.style.dialogWindowAnim);// 这里就是指定动画的操作了,重点。
// 如果可以,还可以指定这个对话框显示的位置,默认是屏幕的中心
//WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
//lp.alpha = 0.8f ;// 这是指定对话框的透明度,[0,1] float类型,所有要加f
//lp.x = -100 ;
//lp.y = -100 ;
//win.setAttributes(lp);
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();
//finish();// 这里注释掉finish()是为了观看对话框消失的动画过程
}
});
but_no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.cancel();
finish();
}
});
}
return super.onKeyDown(keyCode, event);
}
}
这里主Activity的布局文件可以不设定,无所谓,反正也不用它。
现在来看看,对话框的布局文件:
<?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>这里的布局就不多说了,跟一般的布局一样,就是设置这些控件的摆放位置。
接下来,就来看看对话框的弹出和消失是怎样来调用动画的吧,首先在res下建立一个文件夹anim,在这个文件夹下创建两个动画文件
scale_dialog_enter.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromYScale="0" android:toYScale="1.0" android:fromXScale="0" android:toXScale="1.0" android:duration="500" android:pivotX="50%" android:pivotY="50%" /> <alpha android:fromAlpha="0.5" android:toAlpha="1.0" android:duration="500" /> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromYScale="1.0" android:toYScale="0" android:fromXScale="1.0" android:toXScale="0" android:duration="500" android:pivotX="50%" android:pivotY="50%" /> <alpha android:fromAlpha="1.0" android:toAlpha="0.5" android:duration="500" /> </set>
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="dialogWindowAnim" parent="android:Animation"> <item name="android:windowEnterAnimation">@anim/scale_dialog_enter</item> <item name="android:windowExitAnimation">@anim/scale_dialog_out</item> </style> </resources>
接下来的事情,就差不多了。运行一下就ok。
今天在万花筒这款播放器中看到对话框中好多都是用动画来实现的,包括对话框的显示消失,对话框中按钮的点击,等等。一般基本View控件都可以用之前总结的四种动画方式来设定 http://blog.csdn.net/android_dong/article/details/9448321 ;