}
public SlidingAroundFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs, 0);
}
public SlidingAroundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setTranslateAnimation(TypeEnum type) {
TranslateAnimation ta;
if (type == TypeEnum.LEFT) {
if (isLeftOut){
return;
}
isLeftOut = true;
isRightOut = false;
this.setClickable(true);
ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1f, Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0);
ta.setDuration(500);
ta.setFillAfter(true);
this.startAnimation(ta);
} else if (type == TypeEnum.RIGHT) {
if (isRightOut){
return;
}
isLeftOut = false;
isRightOut = true;
ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1f,
Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0);
ta.setDuration(500);
ta.setFillAfter(true);
this.startAnimation(ta);
this.setClickable(false);
} else {
this.setVisibility(VISIBLE);
}
}
}
mListview.setOnTouchListener(onTouchListener);
private boolean isTabShow = true;
private float downY = 0;
// 拖动listview时,如果点击到的地方是item里的一些view,可能出现ACTION_DOWN触发不了的问题。
// 利用isActionDown,当为false时就触发了ACTION_MOVE,第一个action需要当成ACTION_DOWN处理
boolean isActionDown = false;
View.OnTouchListener onTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isActionDown = true;
downY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
if (!isActionDown) {
// 当为false时就触发了ACTION_MOVE,第一个action需要当成ACTION_DOWN处理
isActionDown = true;
downY = event.getY();
} else {
float currentY = event.getY();
if (currentY - downY < -20 && isTabShow) {
// 向下,隐藏
isTabShow = false;
mSlidingAround.setTranslateAnimation(SlidingAroundFrameLayout.TypeEnum.RIGHT);
} else if (currentY - downY > 20 && !isTabShow) {
// 向上,显示
isTabShow = true;
mSlidingAround.setTranslateAnimation(SlidingAroundFrameLayout.TypeEnum.LEFT);
}
}
break;
case MotionEvent.ACTION_UP:
isActionDown = false;// isActionDown重置
break;
default:
break;
}
return false;
}
};
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
mRecyclerview.removeOnScrollListener(myOnScrollListener);
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
Android 基础知识点
Java 基础知识点
Android 源码相关分析
常见的一些原理性问题
希望大家在今年一切顺利,进到自己想进的公司,共勉!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Android 基础知识点
Java 基础知识点
Android 源码相关分析
常见的一些原理性问题
[外链图片转存中…(img-KeBf4ZYY-1713782882598)]
希望大家在今年一切顺利,进到自己想进的公司,共勉!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!