EasyDialog 源码简析

来源:互联网 发布:js用函数做n的阶乘 编辑:程序博客网 时间:2024/05/19 15:24

EasyDialog 源码简析

上一篇 easydialog Android仿QQ ios dialog,仿QQ退出向上菜单

github地址:https://github.com/hellosliu/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



1 0
原创粉丝点击