先看一下 运行效果
该文章 是基于 RecylerView之list显示的基础上 完成的 想了解完整代码 请看 上篇
先看一下 MainActivity 中的代码:
private void loadstggeredData(boolean inversion, boolean orinetion) {
ArrayList<DataBean> datas = new ArrayList<>();
//给bean类放数据,最好把装好数据的bean类放到集合里
for(int i=0;i<pic.length;i++) {
DataBean dataBean = new DataBean();
dataBean.icon =pic[i];
dataBean.name = "Picture" + i;
//bean类放入集合里
datas.add(dataBean);
}
//创建适配器adapter 对象 参数一般为两个 ,上下文数据加载集合
RecycleViewStaggeredGridAdapter adapter = new RecycleViewStaggeredGridAdapter(datas,this);
//设置适配器
recyclerView.setAdapter(adapter);
//布局管理器所需要的的参数 参数 1.规定显示几列, 2.指定item的排列方向
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, orinetion ? StaggeredGridLayoutManager.VERTICAL : StaggeredGridLayoutManager.HORIZONTAL);
manager.setReverseLayout(inversion);
recyclerView.setLayoutManager(manager);
}
在onOptionsItemSelected()方法中 添加:
if (itemId == R.id.action_staggered){
//标准显示
loadstggeredData(false,true);
Toast.makeText(MainActivity.this,"你好",Toast.LENGTH_SHORT).show();
return true;
}//list垂直反向显示
else if (itemId == R.id.action_staggered_vertical){
loadstggeredData(true,true);
}//水平显示
else if(itemId == R.id.action_staggered_horiztal){
loadstggeredData(false,false);
}//水平反向显示
else if(itemId == R.id.action_staggered_horiztalwest){
loadstggeredData(true,false);
}
return super.onOptionsItemSelected(item);
}
其自定义适配器 主要代码:
public class RecycleViewStaggeredGridAdapter extends RecyclerView.Adapter<RecycleViewStaggeredGridAdapter.StaggeredgridHolder> {
private List<DataBean> dataBeen;
private Context context;
public RecycleViewStaggeredGridAdapter(List<DataBean> dataBeen, Context context) {
this.dataBeen = dataBeen;
this.context = context;
}
@Override
public StaggeredgridHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//转换一个view布局对象,决定了item的样子 参数:1 上下文 2 xml布局文件
View itemview = View.inflate(context, R.layout.item_staggeredgrid, null);
//创建一个viewHolder对象
StaggeredgridHolder staggeredgridHolder = new StaggeredgridHolder(itemview);
// ListViewHolder listViewHolder = new ListViewHolder(itemview);
//把viewHolder对象传递出去
return staggeredgridHolder;
}
@Override
public void onBindViewHolder(StaggeredgridHolder holder, int position) {
DataBean dataBean = dataBeen.get(position);
holder.setData(dataBean);
}
@Override
public int getItemCount() {
if (dataBeen != null && dataBeen.size() > 0) {
return dataBeen.size();
}
return 0;
}
public class StaggeredgridHolder extends RecyclerView.ViewHolder {
private final ImageView imgView;
private final TextView textView;
public StaggeredgridHolder(View itemView) {
super(itemView);
imgView = (ImageView) itemView.findViewById(R.id.item_iv_icon);
textView =(TextView) itemView.findViewById(R.id.list_tv_name);
}
public void setData(DataBean data) {
imgView.setImageResource(data.icon);
textView.setText(data.name);
}
}
}
其对应的xml文件主要代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<ImageView
android:src="@drawable/ren"
android:id="@+id/item_iv_icon"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/list_tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"/>
</LinearLayout>