用于替代 Android 自带 Dialog 和 PopupWindow(1)

本文介绍了AnyLayer库,一个用于创建具有背景模糊、动画效果和自定义配置的弹窗组件,同时提供了与Android开发相关的学习资源和面试题集,帮助开发者提升技能和理解技术原理。

AnyLayer


构建一个弹窗

/**

  • 如果需要全局弹窗,必须现在 Application 中初始化

  • 2.4.0 之后不再需要初始化也可全局弹窗

**/

@Deprecated

public static void init(@NonNull Application application)

/**

  • 有背景高斯模糊弹窗,建议提前调用该方法初始化

  • 不用在 Application 调用,可放到启动页中进行,避免影响 APP 启动速度

  • 也可在用到的 Activity 的 onCreate 方法中

**/

public static void initBlurred(@NonNull Context context)

/**

  • 有背景高斯模糊弹窗,在用到的 Activity 的 onCreate 方法中初始化后可在 onDestroy 中回收

**/

public static void recycleBlurred()

/**

  • 此时不需要 APP 存在 Activity 实例

  • 会新启动一个 Activity 并向根布局添加一个浮层

*/

public static void with(@Nullable Context context, LayerActivity.OnLayerCreatedCallback callback)

/**

  • 向窗口根布局添加一个浮层

  • 需要在 Application 中调用{@link AnyLayer#init(Application)}

**/

public static AnyLayer with()

/**

  • 向父布局 viewGroup 添加一个浮层

*/

public static AnyLayer with(@NonNull ViewGroup viewGroup)

/**

  • 向窗口根布局添加一个浮层

**/

public static AnyLayer with(@NonNull Context context)

/**

  • 向窗口根布局添加一个浮层,且位置参照 targetView

**/

public static AnyLayer target(@NonNull View targetView)

/**

  • 设置自定义 View

**/

public AnyLayer contentView(@NonNull View contentView)

/**

  • 设置自定义布局文件

**/

public AnyLayer contentView(@LayoutRes int contentViewId)

/**

  • 设置自定义布局文件中状态栏的占位 View

  • 该控件高度将设置为状态栏高度,可用来使布局整体下移,避免状态栏遮挡

**/

public AnyLayer asStatusBar(@IdRes int statusBarId)

/**

  • 绑定数据

**/

public AnyLayer bindData(LayerManager.IDataBinder dataBinder)

/**

  • 设置显示状态改变的监听

**/

public AnyLayer onVisibleChangeListener(LayerManager.OnVisibleChangeListener mOnVisibleChangeListener)

/**

  • 设置变更为显示状态监听

**/

public AnyLayer onLayerShowListener(LayerManager.OnLayerShowListener onLayerShowListener)

/**

  • 设置变更为隐藏状态监听

**/

public AnyLayer onLayerDismissListener(LayerManager.OnLayerDismissListener onLayerDismissListener)

/**

  • 设置子布局的 gravity,可直接在布局文件指定 layout_gravity 属性,作用相同

**/

public AnyLayer gravity(int gravity)

/**

  • 当以 target 方式创建时为参照 View 位置显示

  • 可自己指定浮层相对于参照 View 的对齐方式

  • @param direction 主方向

  • @param horizontal 水平对齐方式

  • @param vertical 垂直对齐方式

  • @param inside 是否强制位于屏幕内部

**/

public AnyLayer alignment(@NonNull Alignment.Direction direction,

@NonNull Alignment.Horizontal horizontal,

@NonNull Alignment.Vertical vertical,

boolean inside)

/**

  • 自定义浮层的进入和退出动画,可使用工具类{@link AnimHelper}

**/

public AnyLayer contentAnim(LayerManager.IAnim contentAnim)

/**

  • 自定义浮层的进入动画

**/

public AnyLayer contentInAnim(@AnimRes int anim)

/**

  • 自定义浮层的进入动画

**/

public AnyLayer contentInAnim(@NonNull Animation anim)

/**

  • 自定义浮层的退出动画

**/

public AnyLayer contentOutAnim(@AnimRes int anim)

/**

  • 自定义浮层的退出动画

**/

public AnyLayer contentOutAnim(@NonNull Animation anim)

/**

  • 自定义背景的进入和退出动画,可使用工具类{@link AnimHelper}

**/

public AnyLayer backgroundAnim(LayerManager.IAnim backgroundAnim)

/**

  • 自定义背景的进入动画

**/

public AnyLayer backgroundInAnim(@AnimRes int anim)

/**

  • 自定义背景的退出动画

**/

public AnyLayer backgroundInAnim(@NonNull Animation anim)

/**

  • 自定义背景的退出动画

**/

public AnyLayer backgroundOutAnim(@AnimRes int anim)

/**

  • 自定义背景的退出动画

**/

public AnyLayer backgroundOutAnim(@NonNull Animation anim)

/**

  • 默认浮层进入和退出动画时长

**/

public AnyLayer defaultContentAnimDuration(long defaultAnimDuration)

/**

  • 默认浮层进入动画时长

**/

public AnyLayer defaultContentInAnimDuration(long defaultInAnimDuration)

/**

  • 默认浮层退出动画时长

**/

public AnyLayer defaultContentOutAnimDuration(long defaultOutAnimDuration)

/**

  • 默认背景进入和退出动画时长

**/

public AnyLayer defaultBackgroundAnimDuration(long defaultAnimDuration)

/**

  • 默认背景进入动画时长

**/

public AnyLayer defaultBackgroundInAnimDuration(long defaultInAnimDuration)

/**

  • 默认背景退出动画时长

**/

public AnyLayer defaultBackgroundOutAnimDuration(long defaultOutAnimDuration)

/**

  • 设置背景为当前 activity 的高斯模糊效果

  • 设置之后其他背景设置方法失效,仅{@link #backgroundColorInt(int)}生效

  • 且设置的 backgroundColor 值调用 imageView.setColorFilter(backgroundColor)设置

  • 建议此时的{@link #backgroundColorInt(int)}传入的为半透明颜色

  • @param radius 模糊半径

**/

public AnyLayer backgroundBlurRadius(@FloatRange(from = 0, fromInclusive = false, to = 25) float radius)

/**

  • 设置背景为当前 activity 的高斯模糊效果

  • @param radius 模糊的百分比(相较于短边)

**/

public AnyLayer backgroundBlurPercent(@FloatRange(from = 0, fromInclusive = false) float percent)

/**

  • 设置背景高斯模糊的缩小比例

**/

public AnyLayer backgroundBlurScale(@FloatRange(from = 1) float scale)

/**

  • 设置背景图片

**/

public AnyLayer backgroundBitmap(@NonNull Bitmap bitmap)

/**

  • 设置背景资源

**/

public AnyLayer backgroundResource(@DrawableRes int resource)

/**

  • 设置背景 Drawable

**/

public AnyLayer backgroundDrawable(@NonNull Drawable drawable)

/**

  • 设置背景颜色

  • 在调用了{@link #backgroundBitmap(Bitmap)}或者{@link #backgroundBlurRadius(float)}方法后

  • 该颜色值将调用 imageView.setColorFilter(backgroundColor)设置

  • 建议此时传入的颜色为半透明颜色

  • @param colorInt 颜色值

**/

public AnyLayer backgroundColorInt(@ColorInt int colorInt)

/**

  • 设置背景颜色

**/

public AnyLayer backgroundColorRes(@ColorRes int colorRes)

/**

  • 设置浮层外部是否拦截触摸

  • 默认为 true,false 则事件由 activityContent 本身消费

**/

public AnyLayer outsideInterceptTouchEvent(boolean intercept)

/**

  • 设置点击浮层以外区域是否可关闭

**/

public AnyLayer cancelableOnTouchOutside(boolean cancelable)

/**

  • 设置点击返回键是否可关闭

**/

public AnyLayer cancelableOnClickKeyBack(boolean cancelable)

/**

  • 对一个 View 绑定点击事件

**/

public AnyLayer onClick(@IdRes int viewId,

LayerManager.OnLayerClickListener listener)

/**

  • 对一个 View 绑定点击事件,点击时直接隐藏浮层

**/

public AnyLayer onClickToDismiss(@IdRes int viewId,

LayerManager.OnLayerClickListener listener)

/**

  • 对多个 View 绑定点击事件

**/

public AnyLayer onClick(LayerManager.OnLayerClickListener listener,

@IdRes int viewId,

@IdRes int… viewIds)

/**

  • 对多个 View 绑定点击事件,点击时直接隐藏浮层

**/

public AnyLayer onClickToDismiss(LayerManager.OnLayerClickListener listener,

@IdRes int viewId,

@IdRes int… viewIds)

/**

  • 绑定该控件点击时直接隐藏浮层

**/

public AnyLayer onClickToDismiss(@IdRes int viewId, @IdRes int… viewIds)

/**

  • 获取浮层是否已显示

**/

public boolean isShow()

/**

  • 显示

**/

public void show()

/**

  • 隐藏

**/

public void dismiss()

/**

  • 获取 Context

**/

public Context getContext()

/**

  • 获取布局子控件

**/

public V getView(@IdRes int viewId)

/**

  • 获取 View 管理容器

**/

public ViewHolder getViewHolder()

/**

  • 获取自定义的浮层控件

**/

public View getContentView()

/**

  • 获取背景图

**/

public ImageView getBackground()

/**

  • 适配软键盘的弹出,布局自动上移

  • 在某几个 EditText 获取焦点时布局上移

  • 在{@link LayerManager.OnVisibleChangeListener#onShow(AnyLayer)}中调用

  • 应该和{@link #removeSoftInput()}成对出现

  • @param editText 焦点 EditTexts

**/

public void compatSoftInput(EditText… editText)

/**

  • 移除软键盘适配

  • 在{@link LayerManager.OnVisibleChangeListener#onDismiss(AnyLayer)}中调用

  • 应该和{@link #compatSoftInput(EditText…)}成对出现

**/

public void removeSoftInput()

BaseLayer


采用继承的方式创建一个浮层,为方便通用浮层的封装,可在次基础上实现 MVP 模式。

/**

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

说一千道一万,不如自己去行动。要想在移动互联网的下半场是自己占有一席之地,那就得从现在开始,从今天开始,马上严格要求自己,既重视业务实现能力,也重视基础和原理。基础夯实好了,高楼才能够平地而起,稳如泰山。

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节

还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

一线互联网面试专题

379页的Android进阶知识大全

379页的Android进阶知识大全

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

Android)**

最后

说一千道一万,不如自己去行动。要想在移动互联网的下半场是自己占有一席之地,那就得从现在开始,从今天开始,马上严格要求自己,既重视业务实现能力,也重视基础和原理。基础夯实好了,高楼才能够平地而起,稳如泰山。

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节

还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

[外链图片转存中…(img-dR9Bhhi5-1712474249440)]

[外链图片转存中…(img-hOoy8KpA-1712474249440)]

[外链图片转存中…(img-TGQjleBo-1712474249441)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值