自定义Dialog及使用动画效果

项目结构
此处输入图片的描述

1、基类BaseDialog

public abstract class BaseDialog extends Dialog{

    public BaseDialog dialog;
    public Activity activity;

    public BaseDialog(@NonNull Activity activity) {
        super(activity);
        this.dialog=this;
        this.activity=activity;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(initLayout());
        DialogUtils.setWindowPublic(this);
        initEvent();

    }

    public abstract int initLayout();
    public abstract void initEvent();

    /**
     * 设置dialog其他屏幕地方是否触摸消失
     * @param isSetCanceledOnTouchOutside
     * @return
     */
    public BaseDialog setCanceledOnTouchOutside(Boolean isSetCanceledOnTouchOutside) {
        dialog.setCanceledOnTouchOutside(isSetCanceledOnTouchOutside);
        return this;
    }

    /**
     * 设置回退键是否有效
     * @param isCancelable
     * @return
     */
    public BaseDialog setCancelable(Boolean isCancelable) {
        dialog.setCancelable(isCancelable);
        return this;
    }

    /**
     * 显示dialog
     * @return
     */
    public BaseDialog showDialog() {

        if(!isShowing()){
            dialog.show();
        }
        return this;
    }

    /**
     * 关闭dialog
     * @return
     */
    public BaseDialog hideDialog() {

        if(isShowing()){
            dialog.hide();
        }
        return this;
    }

    /**
     * 设置回调  两个点击事件
     */
    public CallBack callBack;

    public interface CallBack{
        void cancel();
        void ok();
    }

    public BaseDialog setCallBack(CallBack callBack) {
        this.callBack = callBack;
        return this;
    }


    /**
     * 设置点击一个条目
     */

    public ClickSingleCallBack clickSingleCallBack;

    public interface ClickSingleCallBack{
        void click(String item);
    }
    public BaseDialog setClickSingleCallBack(ClickSingleCallBack clickSingleCallBack) {
        this.clickSingleCallBack = clickSingleCallBack;
        return this;
    }

    /**
     * 设置照片回调
     */
    public PhotoCallBack photoCallBack;

    public interface PhotoCallBack{
        void takePhoto();
        void selectPhoto();
    }
    public BaseDialog setPhotoCallBack(PhotoCallBack photoCallBack) {
        this.photoCallBack = photoCallBack;
        return this;
    }

}

解说

加载需要自定义dialog页面

setContentView(initLayout());

设置去除dialog状态栏黑色设置

DialogUtils.setWindowPublic(this);

设置点击事件处理

initEvent();

还有就是一些公用的设置,回退键是否有效、点击外面是否有效、关闭、显示dialog以及对于有“确认、取消”两个按键回调,对选择单个按钮按键回调。

DialogUtils工具类、提供动画效果设置等

public class DialogUtils {

    public static void setWindowPublic(Dialog dialog){
        Window window = dialog.getWindow();
        int screenHeight = DensityUtils.getScreenHeight(dialog.getContext());
        int statusBarHeight = DensityUtils.getStatusHeight(dialog.getContext());
        int dialogHeight = screenHeight - statusBarHeight;
        window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, dialogHeight == 0 ? ViewGroup.LayoutParams.MATCH_PARENT : dialogHeight);
        window.setBackgroundDrawableResource(R.color.colorTransparent);
    }

    /**
     * 上到下
     * @param dialog
     */
    public static void setWindowAnimationsTop(Dialog dialog){
        Window window = dialog.getWindow();
        window.setWindowAnimations(R.style.dialog_animation);
    }

    /**
     * 下到上
     * @param dialog
     */
    public static void setWindowAnimationsButtom(Dialog dialog){
        Window window = dialog.getWindow();
        window.setWindowAnimations(R.style.dialogWindowAnimButtomToTop);
    }

}

在style.xml定义

<!--从低到顶动画效果-->
    <style name="dialogWindowAnimButtomToTop" parent="android:Animation" mce_bogus="1">
        <item name="android:windowEnterAnimation">@anim/dialog_enter_anim</item>
        <item name="android:windowExitAnimation">@anim/dialog_exit_anim</item>
    </style>



    <style name="dialog_animation" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
        <item name="android:windowExitAnimation">@anim/push_bottom_out</item>
    </style>

dialog_enter_anim

<?xml version="1.0" encoding="utf-8"?>
<!-- 弹出时动画 -->
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:fromYDelta="100%p"
        android:toYDelta="0%p"
        android:interpolator="@android:anim/accelerate_interpolator" />
</set>

dialog_exit_anim

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:fromYDelta="0%p"
        android:toYDelta="100%p"
        android:interpolator="@android:anim/accelerate_interpolator" />

</set>

push_bottom_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="1500"
        android:fromYDelta="-100%p"
        android:toYDelta="0" />

</set>

push_bottom_out

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1500"
        android:fromYDelta="0"
        android:toYDelta="-100%p" />
</set>

如果不需要动画效果可以不调用这个工具类。

实现一个提示框

public class SelectDialog extends BaseDialog {


    private TextView dialog_ok;
    private TextView dialog_cancel;
    private TextView dialog_content;
    private String content;

    public SelectDialog(@NonNull Activity activity,String content) {
        super(activity);
        this.content=content;
    }

    @Override
    public void 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值