GridLayoutManager 网格Item视图。
StaggeredGridLayoutManager 交错的网格Item视图。瀑布流
RecyclerView.ItemDecoration
通过设置recyclerView.addItemDecoration(new DividerDecoration(this));来改变Item之间的偏移量或者对Item进行装饰。
RecyclerView.ItemDecoration是一个抽象类,可以通过重写以下三个方法,来实现Item之间的偏移量或者装饰效果:
public void onDraw(Canvas c, RecyclerView parent) 装饰的绘制在Item条目绘制之前调用,所以这有可能被Item的内容所遮挡
public void onDrawOver(Canvas c, RecyclerView parent) 装饰的绘制在Item条目绘制之后调用,因此装饰将浮于Item之上
public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) 与padding或margin类似,LayoutManager在测量阶段会调用该方法,计算出每一个Item的正确尺寸并设置偏移量。
RecyclerView.ItemAnimator
ItemAnimator能够帮助Item实现独立的动画。
ItemAnimator作触发于以下三种事件:
某条数据被插入到数据集合中
从数据集合中移除某条数据
更改数据集合中的某条数据
幸运的是,在Android中默认实现了一个DefaultItemAnimator,我们可以通过以下代码为Item增加动画效果:
recyclerView.setItemAnimator(new DefaultItemAnimator());
在之前的版本中,当时据集合发生改变时,我们通过调用.notifyDataSetChanged(),来刷新列表,因为这样做会触发列表的重绘,所以并不会出现任何动画效果,因此需要调用一些以notifyItem*()作为前缀的特殊方法,比如:
public final void notifyItemInserted(int position) 向指定位置插入Item
public final void notifyItemRemoved(int position) 移除指定位置Item
public final void notifyItemChanged(int position) 更新指定位置Item
这些就是RecyclerView的一些基础知识。下面贴一些代码,方便理解。
public class MainActivity extends Activity implements CallBack {
private LinearLayout mLin;
private RecyclerView recycle;
private List list=new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initList();
initView();
}
private void initView() {
mLin=(LinearLayout) findViewById(R.id.mLin);
recycle=new RecyclerView(this);
recycle.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
mLin.addView(recycle);
LinearLayoutManager manager=new LinearLayoutManager(this);//线性布局管理器,支持横向和纵向
manager.setOrientation(LinearLayoutManager.HORIZONTAL);
recycle.setLayoutManager(manager);
recycle.setHasFixedSize(true);//固定宽高
recycle.setItemAnimator(new DefaultItemAnimator());//默认的条目添加动画
recycle.setAdapter(new MyAdapter(this, list, this));
}
private void initList() {
for(int i=0;i<30;i++){
list.add(“第”+(i+1)+“条数据”);
}
}
@Override
public void call(int index) {
Toast.makeText(this, list.get(index), 0).show();
}
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.VH>{
private Context ctx;
private List list;
private CallBack call;
public MyAdapter(Context ctx,List list,CallBack call) {
this.ctx=ctx;
this.list=list;
this.call=call;
}
//内部类–》找ID
class VH extends RecyclerView.ViewHolder{
private TextView tv;
private ImageView img;
private View view;
public VH(View arg0) {
super(arg0);
tv=(TextView) arg0.findViewById(R.id.tv);
img=(ImageView) arg0.findViewById(R.id.img);
view=arg0.findViewById(R.id.view);
}
}
@Override
public int getItemCount() {
return list.size();
}
//arg0==holder arg1:position
@Override
public void onBindViewHolder(VH arg0, final int arg1) {
arg0.img.setImageResource(R.drawable.ic_launcher);
arg0.tv.setText(list.get(arg1));
arg0.view.setBackgroundColor(Color.BLACK);
//自己写的条目点击事件
arg0.tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
call.call(arg1);
}
});
}
@Override
public VH onCreateViewHolder(ViewGroup arg0, int arg1) {
View v=View.inflate(ctx, R.layout.item, null);
return new VH(v);
}
public interface CallBack{
public void call(int index);//index:是你要点击的那个条目对应的在list中的位置:position
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/e3a3fcc4217fe418c6519a1a480154d1.jpeg)
尾声
如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
架构篇
《Jetpack全家桶打造全新Google标准架构模式》
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
adle知识点、常见算法题汇总。)
[外链图片转存中…(img-wGcnGYKD-1712375998174)]
架构篇
《Jetpack全家桶打造全新Google标准架构模式》
[外链图片转存中…(img-Qajv2tnu-1712375998175)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!