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
- EasyDialog 源码简析
- 【Android应用开发】EasyDialog 源码解析
- easydialog弹出框Demo
- easyDialog v2.0
- easyDialog 显示弹出框
- 关于easydialog 使用方法和问题
- JavaScript弹出层组件easyDialog
- javascript弹出层组件easyDialog v2.0
- javascript弹出层组件easyDialog v2.0
- easyDialog 简单、实用的弹出层组件
- JS弹出层 带遮罩与不带遮罩easyDialog v2.0
- 9、jQuery插件之easydialog-v2.0弹窗插件
- Sample_BezierPatch源码简析
- Sample_BSP源码简析
- Sample_CameraTrack源码简析
- Sample_CelShading源码简析
- Sample_Character源码简析
- Sample_BezierPatch源码简析
- Glide加载图片并实现图片缓存
- JAVA一种获得泛型类泛型参数Class对象的方法
- iOS开发之UITextView,设置textView的行间距及placeholder
- 端口渗透总结
- Android中WheelView代码分析笔记1(明天继续分析 >>>>>)
- EasyDialog 源码简析
- 使用SecureCRT进行端口转发
- 数据结构,传值
- 简单搭建spark编译环境
- 机器学习中的正则化
- C++中虚析构函数的作用
- mongo 删除内嵌数组元素
- 网络编程
- CUDA与PyCUDA开发环境配置详情