自定义dialog弹框效果

自定义dialog及动画效果

通常项目中会用到比较特殊的弹框,则就需要自定义写一个dialog,需要重新画个布局添加到dialog中。这里就需要自定义一个Dialog类继承与Dialog。也有可能需要动画效果来增加UI效果。

直接上代码:

package com.wujay.fund;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;



public class AccountDialog extends Dialog {

    private static Context context = null;
    private static AccountDialog myDialog = null;
    private  TextView dialog_cancel;
    private  TextView dialog_ok;
    private SettingDialogCallBack settingDialogCallBack;

    public AccountDialog(Context context, int theme) {
        super(context, theme);
    }

    /***
     *
     * @param context   传入的上下文
     * @return AccountDialog   返回dialog对象
     */
    public static AccountDialog getMyDialog(Context context) {
        AccountDialog.context = context;
        myDialog = new AccountDialog(context, R.style.qmm_dialog);// 创建自定义样式dialog
        myDialog.setContentView(R.layout.account_dialog);// 得到加载view
        myDialog.getWindow().getAttributes().gravity = Gravity.CENTER;//设置显示位置为居中
        myDialog.setCanceledOnTouchOutside(true);//是否可以用返回键取消
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setCancelable(true);//点击对话框以外不关闭
        return myDialog;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //初始化UI
        initUI();
    }

    private void initUI() {
        dialog_cancel = (TextView) myDialog.findViewById(R.id.dialog_cancel);
        dialog_ok = (TextView) myDialog.findViewById(R.id.dialog_ok);
        dialog_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //这里可以为布局上其他的控件设置监听,添加不同的id传值就行。用来回调
                settingDialogCallBack.onActionClick(1);//点击button为1
            }
        });
        dialog_ok.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //这里可以为布局上其他的控件设置监听,添加不同的id传值就行.用来回调
                settingDialogCallBack.onActionClick(2);//点击button为2
            }
        });
    }

    @Override
    public void show() {
        if (context != null) {
            super.show();
        }
    }

    @Override
    public void dismiss() {
        super.dismiss();
    }

    public void onWindowFocusChanged(boolean hasFocus) {

        if (myDialog == null) {
            return;
        }
        if (!hasFocus) {
            dismiss();
        }


    }

    /**
     * [Summary] setMessage 提示内容
     *
     * @param strMessage
     * @return
     */
    public AccountDialog setMessage(String strMessage) {
        TextView tvMsg = (TextView) myDialog.findViewById(R.id.dialog_title);
        if (tvMsg != null) {
            tvMsg.setText(strMessage);
        }
        return myDialog;
    }

    /**
     * 是否可以用返回键取消
     *
     * @param cancel
     */
    public void isBackUndo(boolean cancel) {
        myDialog.setCancelable(cancel);
    }

    public interface SettingDialogCallBack {
        /**
         * 事件点击
         * @param id 返回点击按键的id
         */
        public void onActionClick (int id);
    }
    /**
     *  接口回调
     * @param settingDialogCallBack
     */
    public void setSettingDialogCallBack(SettingDialogCallBack settingDialogCallBack) {
        this.settingDialogCallBack = settingDialogCallBack;
    }
}

这里用到style样式:


在Activity中调用,获取dialog的实体类对象:

public class MainActivity extends Activity implements OnClickListener {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	
		findViewById(R.id.mBtnSetLock).setOnClickListener(new OnClickListener() {
   		@Override
  		 public void onClick(View view) {
			//弹出dialog
			
			showMyDialog()

   		}
		});




	}

	
	private void showMyDialog() {
  	 //获取实体类
   	final AccountDialog mAccountDialog=AccountDialog.getMyDialog(MainActivity.this);
   	//可以设置很大不同的动画
  	 //mAccountDialog.getWindow().setWindowAnimations(R.style.Dialog_Anim_Style);
  	 mAccountDialog.getWindow().setWindowAnimations(R.style.Dialog_Anim_Style2);
  	 //回调实现点击
   	mAccountDialog.setSettingDialogCallBack(new AccountDialog.SettingDialogCallBack() {
    	  @Override
     	 public void onActionClick(int id) {
         switch (id){
            case 1:
               if(mAccountDialog!=null&&mAccountDialog.isShowing()){
                  mAccountDialog.dismiss();
               }

               break;
            case 2:
               if(mAccountDialog!=null&&mAccountDialog.isShowing()){
                  mAccountDialog.dismiss();
               }
               break;
         	}
    	  }
   	});
  	 mAccountDialog.show();
	}

}


这里面引用了dialog动画效果,主要是这个

mAccountDialog.getWindow().setWindowAnimations(R.style.Dialog_Anim_Style2);

实现的。setWindowAnimations是设置窗口弹出动画的。跟Activity切换动画效果是一样的。


anim里面的动画:(可以随意换自己想要的动画效果)





    

    
    




    
    
    
    


哦了。没什么难点。效果图!请忽视其他的







你可能感兴趣的:(工作的学习)