最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
标签:
用于替代 Android 自带 Dialog 和 PopupWindow
简介
==
-
链式调用
-
可实现 Dialog 效果
-
可实现 PopupWindow 效果
-
可实现悬浮菜单效果
-
可自定义数据绑定
-
可自定义进出场动画
-
可自由控制显示大小和位置
-
可自定义背景变暗或者显示图片
-
可一行代码实现背景高斯模糊
-
占用区域不会超过当前 Activity,避免导航栏遮挡问题
-
PopupWindow 效果时可跟随目标 View 移动
-
可全局弹出
-
可从 ApplicationContext 弹出
从 2.4.0 版本开始,添加了一个通用弹窗库,里面会封装一些比较常见的弹窗,不定期更新,已有通用弹窗:
-
提示弹窗
-
列表弹窗(可实现单选和菜单效果)
-
加载中弹窗
-
菜单弹窗(ToolBar 右上角的更多菜单)
求职(2019-05-30~今)
================
感觉最近不是招聘旺季,大多数职位都停止招聘了。唉,离职时间不赶趟呀。
有没有大佬有内推的,欢迎联系。
QQ:302833254
E-mail:goweii@163.com
说明
==
可以看到我的 GitHub 上面有 3 个功能比较类似的可以实现弹窗的框架。分别为 AnyDialog、AnyLayer 和 FloatingLayer。可能大家有点混淆,为什么同一个功能要写 3 个框架?为了骗点击数?在这里向大家说明下每个框架的针对点。
首先是 AnyDialog,他继承自 Dialog,目的是方便 Dialog 的创建和使用。
再者是 FloatingLayer,他是 AnyLayer 的一个最初版,写他的目的是因为有时候 Dialog 会被导航栏遮挡,或者 Dialog 的出现消失动画会经过黑色的导航栏区域,看着很不爽,很别扭。所以就想如果 Dialog 的范围能和当前的 Activity 的显示范围一样就好了,因此写了一个 FloatingLayer,让他依附于 Activity,控制一个 View 的动态添加和移除。
最后是 AnyLayer,随着 FloatingLayer 的完善,我重构了代码,分离出了 3 个关键类,让他不再仅为实现 Dialog 效果,还可以实现 PopupWindow 和悬浮菜单等效果。因此我觉得有必要给他一个新的名字了,也是为了和 AnyDialog 相呼应,因此定名为 AnyLayer。
所以可以看出,FloatingLayer 其实已经停止维护,AnyDialog 还是建议用于普通的 Dialog 弹窗,而 AnyLayer 则是去替代一些浮动窗口的显示。
截图
==
截图效果较差且版本较老,建议下载 Demo体验最新功能
使用说明
====
集成
–
// build.gradle(Project:)
allprojects {
repositories {
…
maven { url ‘https://www.jitpack.io’ }
}
}
点击查看最新版本号 从 2.3.1 版本开始,版本号前不加 v,引用时需要注意。
// build.gradle(Module:)
dependencies {
// 完整引入
implementation ‘com.github.goweii:AnyLayer:2.5.0’
// 基础库
implementation ‘com.github.goweii.AnyLayer:anylayer:2.5.0’
// 通用弹窗(依赖基础库)
implementation ‘com.github.goweii.AnyLayer:anylayer-common:2.5.0’
}
调用
–
Dialog 效果
AnyLayer.with(this)
.contentView(R.layout.dialog_test_2)
.bindData(new LayerManager.IDataBinder() {
@Override
public void bind(AnyLayer anyLayer) {
// TODO 绑定数据
}
})
.backgroundColorRes(R.color.dialog_bg)
.onClickToDismiss(R.id.fl_dialog_yes, R.id.fl_dialog_no)
.show();
PopupWindow 效果
AnyLayer.target(targetView)
.contentView(R.layout.dialog_test_4)
.alignment(Alignment.Direction.VERTICAL, Alignment.Horizontal.CENTER, Alignment.Vertical.BELOW, true)
.backgroundColorRes(R.color.dialog_bg)
.contentAnim(new LayerManager.IAnim() {
@Override
public Animator inAnim(View content) {
return AnimHelper.createTopInAnim(content);
}
@Override
public Animator outAnim(View content) {
return AnimHelper.createTopOutAnim(content);
}
})
.show();
API
===
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)
/**
总结
算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。
这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。
部分资料展示:
有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
/**
总结
算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。
这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。
部分资料展示:
[外链图片转存中…(img-R0GScwbj-1715148188533)]
[外链图片转存中…(img-BMHXZqzj-1715148188533)]
[外链图片转存中…(img-SHib6YBc-1715148188534)]
[外链图片转存中…(img-kzJVbEiE-1715148188534)]
有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!