您的位置:首页 > 移动开发 > Android开发

Android开发之RecyclerView的基本使用(实现常用的4种效果)

2017-05-14 11:23 681 查看
recyclerView的强大无需我多言,现在来总结一下recyclerView的常用的4种效果。

第一种效果:listView垂直效果(这个最常用)



第二种效果:gridview效果



第三种效果:水平效果



第四种效果:瀑布流效果



-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------

开始代码走起......

第一种效果的核心代码(listView垂直显示效果):

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));第二种效果的核心代码(gridview效果):
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));第三种效果的核心代码(水平效果):
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
第四种效果的核心代码(瀑布流效果):
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL));

-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------
可能上面区区四行代码对于刚入门的小白有点蒙蔽,好啦下面开始撸起recyclerView的另一个核心之处adapter

新建一个MyRecyclerViewAdapter类继承自RecyclerView.Adapter<MyStaggedRecyclerAdapter.MyViewHolder>
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {

private ArrayList<String> mList;

public MyRecyclerAdapter(ArrayList<String> list) {
mList = list;
}

@Override
public MyRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false);
return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyRecyclerAdapter.MyViewHolder holder, int position) {
holder.tv.setText(mList.get(position));
}

@Override
public int getItemCount() {
return mList.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tv;

public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
}


为了更好的显示瀑布流的效果,所以又重新新建一个MyStaggedRecyclerAdapter类继承自RecyclerView.Adapter<MyStaggedRecyclerAdapter.MyViewHolder>

public class MyStaggedRecyclerAdapter extends RecyclerView.Adapter<MyStaggedRecyclerAdapter.MyViewHolder> {
private ArrayList<String> mList;
private List<Integer> heights;

public MyStaggedRecyclerAdapter(ArrayList<String> list) {
mList = list;
heights = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
heights.add((int) (200 + Math.random() * 50));
}
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listitem, parent, false);
return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
//绑定数据
LayoutParams layoutParams = holder.tv.getLayoutParams();
layoutParams.height = heights.get(position);
holder.tv.setBackgroundColor(Color.rgb(100, (int) (Math.random() * 255), (int) (Math.random() * 255)));
holder.tv.setLayoutParams(layoutParams);
holder.tv.setText(mList.get(position));
}

@Override
public int getItemCount() {
return mList.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tv;

public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
}


MainActivity代码:
public class MainActivity extends AppCompatActivity {

private RecyclerView mRecyclerView;
private ArrayList<String> mList;
private MyRecyclerAdapter mRecyclerAdapter;
private MyStaggedRecyclerAdapter myStaggedRecyclerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.rv);
mRecyclerAdapter = new MyRecyclerAdapter(getData());
//        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));//默认listView垂直效果
//        mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
//        mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));//gridview效果
myStaggedRecyclerAdapter = new MyStaggedRecyclerAdapter(getData());
//瀑布流效果
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL));
mRecyclerView.setAdapter(myStaggedRecyclerAdapter);
}

protected ArrayList<String> getData() {
mList = new ArrayList<String>();
for (int i = 0; i < 30; i++) {
mList.add("第" + i + "个item");
}
return mList;
}
}


切记要导入recyclerView的支持包。
build.gradle里面加入:compile 'com.android.support:recyclerview-v7:25.2.0'即可
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile 'com.android.support:recyclerview-v7:25.2.0'
}

-----------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------
下一章继续实现recyclerView的其他效果。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: