android学习-对话框的动画弹出和动画消失

由于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>


scale_dialog_out.xml

<?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>


建立好这两个文件之后还不够,还要将这两个文件分配到一个资源文件中去,当对话框在弹出和消失的时候,会根据对话框的状态来调用动画。在values文件夹下建立一个styles.xml文件,代码如下

<?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 ;








你可能感兴趣的:(android)