您的位置:首页 > 其它

EasyDialog 源码简析

2016-03-15 15:33 253 查看

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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {decorView.post(new Runnable() {@Overridepublic void run() {decorView.removeView(rootView);isDismissing = false;}});}@Overridepublic void onAnimationRepeat(Animation animation) {}});rootContent.startAnimation(outAnim);isDismissing = true;}
移除是要记得,先显示移除动画,在移除动画结束后,开启线程,移除view

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

github上点星星,欢迎fork


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: