尾声
在我的博客上很多朋友都在给我留言,需要一些系统的面试高频题目。之前说过我的复习范围无非是个人技术博客还有整理的笔记,考虑到笔记是手写版不利于保存,所以打算重新整理并放到网上,时间原因这里先列出面试问题,题解详见:
展示学习笔记
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
下面再看看实现类
AlphaInAnimation
/**
-
https://github.com/CymChad/BaseRecyclerViewAdapterHelper
-
渐显
*/
public class AlphaInAnimation implements BaseAnimation {
/**
- 默认透明度从0
*/
private static final float DEFAULT_ALPHA_FROM = 0f;
private final float mFrom;
public AlphaInAnimation() {
this(DEFAULT_ALPHA_FROM);
}
public AlphaInAnimation(float from) {
mFrom = from;
}
@Override
public Animator[] getAnimators(View view) {
//返回一个Animator数组 将动画附加到view上,透明度从mFrom-1f
return new Animator[]{ObjectAnimator.ofFloat(view, “alpha”, mFrom, 1f)};
}
}
其实就是设置一个属性动画在view上,然后将Animator数组返回,外界就可以直接调用
anim.setDuration(mDuration).start();设置动画时长并开启加载动画了.
ScaleInAnimation
/**
-
https://github.com/CymChad/BaseRecyclerViewAdapterHelper
-
缩放
*/
public class ScaleInAnimation implements BaseAnimation {
private static final float DEFAULT_SCALE_FROM = .5f;
private final float mFrom;
public ScaleInAnimation() {
this(DEFAULT_SCALE_FROM);
}
public ScaleInAnimation(float from) {
mFrom = from;
}
@Override
public Animator[] getAnimators(View view) {
//设置scaleX和scaleY都从mFrom-1f
ObjectAnimator scaleX = ObjectAnimator.ofFloat(view, “scaleX”, mFrom, 1f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(view, “scaleY”, mFrom, 1f);
return new ObjectAnimator[]{scaleX, scaleY};
}
}
SlideInBottomAnimation
/**
-
https://github.com/CymChad/BaseRecyclerViewAdapterHelper
-
从下往上
*/
public class SlideInBottomAnimation implements BaseAnimation {
@Override
public Animator[] getAnimators(View view) {
//这里设置的是view的纵坐标,从view.getMeasuredHeight()-0,相当于从下往上移动自身的高度
return new Animator[]{
ObjectAnimator.ofFloat(view, “translationY”, view.getMeasuredHeight(), 0)
};
}
}
SlideInLeftAnimation
/**
-
https://github.com/CymChad/BaseRecyclerViewAdapterHelper
-
从左往右
*/
public class SlideInLeftAnimation implements BaseAnimation {
@Override
public Animator[] getAnimators(View view) {
//view 的translationX 从 -顶层root view的宽度~0
return new Animator[]{
ObjectAnimator.ofFloat(view, “translationX”, -view.getRootView().getWidth(), 0)
};
}
}
SlideInRightAnimation
/**
-
https://github.com/CymChad/BaseRecyclerViewAdapterHelper
-
从右往左
*/
public class SlideInRightAnimation implements BaseAnimation {
@Override
public Animator[] getAnimators(View view) {
//view 的translationX 从 顶层root view的宽度~0
return new Animator[]{
ObjectAnimator.ofFloat(view, “translationX”, view.getRootView().getWidth(), 0)
};
}
}
SlideInTopAnimation
从上往下,这是我自己加的,感觉这种动画效果很不错嘛
/**
-
author feiyang
-
create at 2017/10/19 10:37
-
description:从上往下
*/
public class SlideInTopAnimation implements BaseAnimation {
@Override
public Animator[] getAnimators(View view) {
return new Animator[]{
ObjectAnimator.ofFloat(view, “translationY”, -view.getMeasuredHeight(), 0)};
}
}
二,再看看BaseQuickAdapter
=====================
//Animation
/**
- Use with {@link #openLoadAnimation}
*/
public static final int ALPHAIN = 0x00000001;
/**
- Use with {@link #openLoadAnimation}
*/
public static final int SCALEIN = 0x00000002;
/**
- Use with {@link #openLoadAnimation}
*/
public static final int SLIDEIN_BOTTOM = 0x00000003;
/**
- Use with {@link #openLoadAnimation}
*/
public static final int SLIDEIN_LEFT = 0x00000004;
/**
- Use with {@link #openLoadAnimation}
*/
public static final int SLIDEIN_RIGHT = 0x00000005;
@IntDef({ALPHAIN, SCALEIN, SLIDEIN_BOTTOM, SLIDEIN_LEFT, SLIDEIN_RIGHT})
@Retention(RetentionPolicy.SOURCE)
public @interface AnimationType {
}
/**
- 动画只执行1次?
*/
private boolean mFirstOnlyEnable = true;
/**
- 开启了动画?
*/
private boolean mOpenAnimationEnable = false;
private Interpolator mInterpolator = new LinearInterpolator();
/**
- 动画播放时长
*/
private int mDuration = 300;
/**
- 上一个在播放动画的item的位置
*/
private int mLastPosition = -1;
/**
- 自定义的动画
*/
private BaseAnimation mCustomAnimation;
/**
- 当前选择使用哪种动画
*/
private BaseAnimation mSelectAnimation = new AlphaInAnimation();
上面就是定义了5种默认的动画
- ALPHAIN 渐显
- SCALEIN 缩放
- SLIDEIN_BOTTOM 从下到上
- SLIDEIN_LEFT 从左到右
- SLIDEIN_RIGHT 从右到左
并且下面还定义了AnimationType,这里是注解类型有点类似于枚举,就是当使用@AnimationType修饰的参数时只能使用上面的5种动画常量中的1种.关于枚举,其实很有必要学习一下,在很多时候可以规范我们的编码,可以看看Airsaid大神写的Android 中注解的使用.
后面是一些其他的属性,已加入详细注释.
设置从哪个item开始执行动画
/**
-
up fetch end
-
设置count个不执行动画
*/
public void setNotDoAnimationCount(int count) {
mLastPosition = count;
}
可以看到,将mLastPosition设置为count,mLastPosition之前的item是不会被加载动画了.
当视图附加到窗口时,开始执行动画
/**
-
Called when a view created by this adapter has been attached to a window.
-
simple to solve item will layout using all
-
{@link #setFullSpan(RecyclerView.ViewHolder)}
-
@param holder
*/
@Override
public void onViewAttachedToWindow(K holder) {
super.onViewAttachedToWindow(holder);
int type = holder.getItemViewType();
if (type == EMPTY_VIEW || type == HEADER_VIEW || type == FOOTER_VIEW || type ==
LOADING_VIEW) {
//设置为跨区域 比如是StaggeredGridLayoutManager时,header或者footer等应该如何展示
setFullSpan(holder);
最后
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
相信它会给大家带来很多收获:
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
图片转存中…(img-z2b0SGVV-1715715509853)]
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
- 无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!
- 我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
当我们在抱怨环境,抱怨怀才不遇的时候,没有别的原因,一定是你做的还不够好!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!