概述
- 你想要控制其显示的方式,请通过布局管理器LayoutManager
- 你想要控制Item间的间隔(可绘制),请通过ItemDecoration
- 你想要控制Item增删的动画,请通过ItemAnimator
- 你想要控制点击、长按事件,请自己写!
- LinearLayoutManager:线性布局,横向或者纵向滑动列表
- GridLayoutManager:表格布局
- StaggeredGridLayoutManager:流式布局
首页我们在主Activity写自己的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.five.test.recyclerview.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/linear_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
接着来书写自己的适配器的代码,进行页面的展示
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
Context mcontext;
List<String> mlist;
List<Integer> mheight;
public MyAdapter(Context context, List<String> list) {
mcontext=context;
mlist=list;
//随机高度集合
mheight=new ArrayList<Integer>();
for(int i=0;i<mlist.size();i++){
mheight.add((int)(100+Math.random()*300));
}
}
@Override
public int getItemCount() {
return mlist.size();
}
//找到布局中空间位置
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv;
public MyViewHolder(View arg0) {
super(arg0);
tv=(TextView) arg0.findViewById(R.id.id_num);
}
}
//绑定,渲染数据到view中
@Override
public void onBindViewHolder(MyViewHolder holder, int arg1) {
ViewGroup.LayoutParams lp=holder.tv.getLayoutParams();
lp.height=mheight.get(arg1);
holder.tv.setLayoutParams(lp);
holder.tv.setText(mlist.get(arg1));
}
//先执行onCreateViewHolder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int arg1) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
mcontext).inflate(R.layout.item, parent,
false));
return holder;
}
public void add(int pos) {
mlist.add(pos, "insert");
mheight.add((int)(100+Math.random()*300));
notifyItemInserted(pos);
}
public void del(int pos) {
mlist.remove(pos);
notifyItemRemoved(pos);
}
}
添加自己的适配器的布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="#93AFA0"
android:layout_margin="3dp"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/id_num"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="1" />
</FrameLayout>
最后进行主的Activity的数据,用来写要展示的数据,以及需要的变量值
RecyclerView recyclerView;
List<String> mlist;
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initview();
}
private void initview() {
recyclerView=(RecyclerView) findViewById(R.id.linear_recycler);
adapter=new MyAdapter(this,mlist);
//设置动画
recyclerView.setItemAnimator(new DefaultItemAnimator());
//设置分割线
//recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
//recyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置布局
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));
recyclerView.setAdapter(adapter);
}
//用来展示的数据
private void initData() {
mlist=new ArrayList<String>();
for(int i=0;i<50;i++){
mlist.add("Staggereditem"+i);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId())
{
case R.id.add:
adapter.add(1);
break;
case R.id.del:
adapter.del(1);
break;
}
return true;
}
其中的menu是android中的三大键的使用,在这里主要用来放在手机的右上角进行对条目的增加和删除的操作的
这里附上menu的代码,其中的id是用来写自己的控制按钮的,title是要对这个按钮的进行命名
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/add" android:title="add"></item>
<item android:id="@+id/del" android:title="del"></item>
</menu>
最后就是我们最关注的效果了,在这里
最后
以上就是碧蓝微笑为你收集整理的recyclerView实现瀑布流的全部内容,希望文章能够帮你解决recyclerView实现瀑布流所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复