EasyDialog 源码简析

EasyDialog 源码简析


给大家介绍了,我放到github上的项目easydialog,这一篇给大家介绍一下实现代码

     

1.创建EasyDialog类

public EasyDialog(EasyDialogBuilder builder){
        Activity activity = (Activity)builder.getContext();

        mBuilder = builder;
        dialogView = builder.getDialogView();

        LayoutInflater layoutInflater = LayoutInflater.from(builder.getContext());

        decorView = (ViewGroup) activity.getWindow().getDecorView().findViewById(android.R.id.content);
        rootView = (ViewGroup) layoutInflater.inflate(R.layout.view_root, decorView, false);

        rootContent = (ViewGroup) rootView.findViewById(R.id.fl_root_content);
        rootContent.setLayoutParams(builder.getContentParams());



        rootView.setLayoutParams(builder.getRootLayoutParams());

        rootContent.addView(createView(layoutInflater));

        outAnim = builder.getOutAnimation();
        inAnim = builder.getInAnimation();

        initCancelable();

    }
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">
</span>

首先要获取到android最定层视图,activity.getWindow().getDecorView().findViewById(android.R.id.content);
然后在其中加入我们需要的展示的视图

2.创建动画

<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false"
    >

  <translate
      android:duration="200"
      android:fromXDelta="0%"
      android:fromYDelta="100%"
      android:toXDelta="0%"
      android:toYDelta="0%"
      />
</set>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">创建进入动画,退出动画类似</span>

</pre><h3>3.添加显示view</h3></div><div><p>decorView.addView(view);</p><h2>4.获取焦点,获取键盘时间,在点击返回键时,移除</h2><pre name="code" class="java">
<pre name="code" class="java">rootContent.startAnimation(inAnim);
        rootContent.requestFocus();

        dialogView.setOnkeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                switch (event.getAction()) {
                    case KeyEvent.ACTION_UP:
                        if (keyCode == KeyEvent.KEYCODE_BACK) {
                            dismiss();
                            return true;
                        }
                        break;
                    default:
                        break;
                }
                return false;
            }
        });

        dialogView.setDismissClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
</pre><h2>5.最后移除实现</h2><pre name="code" class="java"><pre name="code" class="java">public void dismiss(){
        if(isDismissing){
            return;
        }
        outAnim.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                decorView.post(new Runnable() {
                    @Override
                    public void run() {
                        decorView.removeView(rootView);
                        isDismissing = false;
                    }
                });
            }
            @Override
            public void onAnimationRepeat(Animation animation) {}
        });

        rootContent.startAnimation(outAnim);
        isDismissing = true;
    }

移除是要记得,先显示移除动画,在移除动画结束后,开启线程,移除view

简单的介绍就这些,觉得好的小伙伴,请帮忙顶博客
github:https://github.com/hellosliu/EasyDialog

github上点星星,欢迎fork



 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值