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
相关文章推荐
- 【堆栈应用一】一个数divided=几个最小质因数的乘积
- I2C分析及RX8025驱动编写
- 【leetcode】【189】Rotate Array
- RAID简单介绍和Linux如何搭建一个RAID
- 初识Ansible
- PhoneGap&Cordova
- JAVA线程知识点
- 是不是要这样讲
- RGB颜色查询对照表
- 两个有序数组相融合
- 如何将本地项目上传到git的中间仓库和下载到本地及注意点
- POJ 2104 K-th Number 主席树
- Spring 事务中 readOnly 的解释
- Spring 事务
- Spring学习笔记
- mybatis初学(遇到的一系列问题)
- .net操作word-1
- 初始化COM-----------------------AfxOleInit()和::CoInitialize(NULL)区别
- SQL exists和in的区别
- Mysql 远程登陆配置