dengrui0917 发表于 2013-1-15 02:20:13

动态的弹出对话框

 动态的弹出自定义对话框
调   //调用对话框,
Private void CreateDialog(){
View commentDialogView = LayoutInflater.from(context).inflate(
              R.layout.detail_dialog, GameDetail.this, false);
       FusionField.viewHandler.sendMessage(FusionField.viewHandler
              .obtainMessage(FusionCode.SHOW_DIALOG_FROW_VIEW,
                     commentDialogView));
}
    /**
     * 使对话框消失
     */
    private void dismissDialogView()
    {
       sendHandlerMessage(FusionCode.SHOW_DIALOG_FROW_VIEW, null);
    }
 
    /**
     * 发送Handler消息
     * @param what 消息体
     * @param obj 对象
     */
    private void sendHandlerMessage(int what, Object obj)
    {
       FusionField.viewHandler.sendMessage(FusionField.viewHandler
              .obtainMessage(what, obj));
    }
 
 对话框实现代码
 
1.在res/anim文件下添加两的xml文件 scale_dialog_dismiss.xml 和 scale_dialog_show.xml
Sscale_dialog_dismiss.xml
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale android:interpolator="@android:anim/accelerate_interpolator"
       android:fromXScale="1.0" android:toXScale="0.0" android:fromYScale="1.0"
       android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%"
       android:fillAfter="false" android:duration="300"
       android:repeatMode="restart" />
</set>
 
Scale_dialog_show.xml
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale android:interpolator="@android:anim/accelerate_interpolator"
       android:fromXScale="1.0" android:toXScale="0.0" android:fromYScale="1.0"
       android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%"
       android:fillAfter="false" android:duration="300"
       android:repeatMode="restart" />
</set>
 
 
 
    /**
     *  菜单动画是否结束
     */
    boolean isDialogAniEnd = true;
    /**
     *  当前正在显示的view
     */
    View currentView;
    Animation dialogShowAnimation;
    Animation dialogDismissAnimation;
 
//初始化两个动画
    @Override
    protected void onStart()
    {
       dialogShowAnimation = AnimationUtils.loadAnimation(this,
              R.anim.scale_dialog_show);
       dialogDismissAnimation = AnimationUtils.loadAnimation(this,
              R.anim.scale_dialog_dismiss);
}
Handler viewHandler = new Handler()
    {
       public void handleMessage(android.os.Message msg)
       {
           switch (msg.what)
           {
               case FusionCode.SHOW_DIALOG_FROW_VIEW:
              // 显示自定义动画对话框
              if (aniDialogView == null && msg != null && msg.obj != null)
              {
                  isDialogAniEnd = true;
              WindowManager.LayoutParams winlp = new WindowManager.LayoutParams(
                         320, 480,
                         WindowManager.LayoutParams.TYPE_APPLICATION,
                         WindowManager.LayoutParams.FLAG_FULLSCREEN,
                         PixelFormat.TRANSLUCENT);
                  winlp.gravity = Gravity.CENTER;
                     //给对话框负初始值
                  aniDialogView = new RelativeLayout(Main.this);
                  aniDialogView.setBackgroundColor(0x99000000);
                  aniDialogView.addView((View) msg.obj);
                  aniDialogView.setGravity(Gravity.CENTER);
                  showAnimationDialog(aniDialogView, (View) msg.obj, winlp);
              }
              else
              {//关闭对话框
                  if (isDialogAniEnd)
                  {
                     isDialogAniEnd = false;
                     dismissAnimationDialog(aniDialogView);
                  }
              }     
              break;
             default:
              break;
           }
       }
}
/**
        * 显示自定义动画对话框
        * @param obj     要显示的view
        * @param winlp     添加到页面的参数
        */
       private void showAnimationDialog(View baseLayout, View contentView,
              android.view.WindowManager.LayoutParams winlp)
       {
           if (mWindowManager != null)
           {
              mWindowManager.addView(baseLayout, winlp);
              contentView.startAnimation(dialogShowAnimation);
           }
       };
 
/**
        * 取消自定义动画对话框
        * @param obj     要显示的view
        * @param winlp     添加到页面的参数
        */
       private void dismissAnimationDialog(RelativeLayout aniDialogView)
       {
           if (mWindowManager != null && aniDialogView != null)
           {
              dialogDismissAnimation
                     .setAnimationListener(new AnimationListener()
                     {
 

<span style="font-size: 10pt; color: black; font-family: "Courier New";"><span style="">
页: [1]
查看完整版本: 动态的弹出对话框