因为工作需要,最近写了几个Dialog的类,后来出于新鲜和好奇,就研究了网上一些比较常用的Dialog的Demo,总体感觉效果绚丽,本质还是不变。这里先整理和推荐两个查询中搜索到的github项目
这个是集合了多种Android经典Demo的整合地址,并且在不断更新完善:
https://github.com/XXApple/AndroidLibs
这个是个人推荐和感觉不错的Dialog,尤其是其中的动画效果,文章结尾会大致列一下其中的动画创建,其他的用法之类的网上都有大量的雷同说明,在此就不再多做解释,重点标注一下他内置的动画库
https://github.com/H07000223/FlycoDialog_Master
另外就是个人写的一个自定义的Dialog,效果一般,只是出于总结的习惯发布上来。
自定义的Dialog类一般是继承AlertDialog或者Dialog类,定义自己的布局View和Style显示风格,不过根据之前的开发经验,因为Android6.0以上的版本权限问题,没有弹窗悬浮权限的异常情况下,也曾经通过Activity来定义了一个弹窗效果,相当于将Activity界面的背景设定为半透明,拉取出来之后覆盖在原Activity的Dialog,这种方式可以避免Dialog没有权限崩溃问题,亦或者不会出现没有context载体而导致dialog显示的异常。但是UI效果确不敢恭维,只是没办法的将就之计。好了,题外话不多数说了,定义自己的Dialog。
首先从FlycoDialog_Master提取出了两个基类BaseDialog和BaseAnimatorSet,用于弹窗和动画效果。
定义自己的FirshDeviceBindDialo继承BaseDialog,需要实现两个方法onCreateView和setUiBeforShow
setUiBeforShow用于弹窗加载显示之前处理逻辑和数据,onCreateView用来填充自己的布局文件。
@Override public View onCreateView() { widthScale(0.85f); showAnim(new FlipTopEnter()); dismissAnim(new FlipHorizontalExit()); View inflate = View.inflate(mContext, R.layout.first_device_bind_dialog, null); medal_iv = (ImageView) inflate.findViewById(R.id.medal_iv); device_bind_close = (ImageView) inflate.findViewById(R.id.device_bind_close); togo_bind = (Button) inflate.findViewById(R.id.togo_bind); togo_purchase = (Button) inflate.findViewById(R.id.togo_purchase); device_bind_title = (TextView) inflate.findViewById(R.id.device_bind_title); setCanceledOnTouchOutside(false); setFlickerAnimation(medal_iv); return inflate; }
以上代码步骤分别对应设定动画效果、加载View控件、设定图片的闪烁动画。
开放两个对外的点击接口
/** * 设置确定按钮和取消被点击的接口 */ public interface onPurchaseOnclickListener { public void onPurchaseClick(); } public interface onBindOnclickListener { public void onBindClick(); }
主界面创建和显示对应的弹窗
// TODO: 2018/5/18 显示弹窗 final FirshDeviceBindDialog FirshDeviceBind_Dialog = new FirshDeviceBindDialog(MainActivity.this); if (FirshDeviceBind_Dialog != null) { FirshDeviceBind_Dialog.setPurchase(new FirshDeviceBindDialog.onPurchaseOnclickListener() { @Override public void onPurchaseClick() { //确认 FirshDeviceBind_Dialog.dismiss(); } }).setBind(new FirshDeviceBindDialog.onBindOnclickListener() { @Override public void onBindClick() { //退出 FirshDeviceBind_Dialog.dismiss(); } }).show(); }
对应Demo下载地址:https://download.youkuaiyun.com/download/wangyetongsss/10423045
如果你喜欢这样的动画效果,也可以从FirshDeviceBindDialo库中直接提取对应的动画效果,或者自己定义不同效果,让弹窗变的更优雅酷炫
卡牌、旋转、淡入等等的动画效果,相当棒!!