RecyclerView 是一个综合性的列表空间 他综合实现了listview gridview 以及瀑布流 使用起来超级简单 而且效果很强大 并且还优化了很多gridview listview 的不足之处
简单说一下RecyclerView的使用
compile ‘com.android.support:recyclerview-v7:24.2.1’ // RecyclerView
compile ‘com.android.support:cardview-v7:23.0.1’ // cardview
我是使用cardview 和RecyclerView 结合使用的
你也可以单独使用RecyclerView 就好
xml 文件
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerview_list"></android.support.v7.widget.RecyclerView>
</LinearLayout>
// 初始化控件
private void initView(View view) {
recyclerview_list = (RecyclerView) view.findViewById(R.id.recyclerview_list);
}
// 模拟数据
private List getData() {
List<String> data = new ArrayList<>();
String item = "item";
for (int i = 0; i < 100; i++) {
data.add(item+i);
}
return data;
}
// item 的 xml 文件
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
app:cardCornerRadius="10dp"
android:layout_margin="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:gravity="center"
android:padding="10dp"
android:visibility="gone"
android:text="11"
android:background="#c3f4b4"
android:id="@+id/item_title"/>
<ImageView
android:visibility="visible"
android:padding="15dp"
android:scaleType="centerCrop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_img"
android:src="@mipmap/m1"/>
</android.support.v7.widget.CardView>
// RecyclerView的adapter
class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
Context context;
List<String> data;
LayoutInflater inflater;
private List<Integer> mHeights;
public MyAdapter(Context context,List<String> data) {
this.context = context;
this.data = data;
inflater = LayoutInflater.from(context);
mHeights = new ArrayList<>();
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflate = inflater.inflate(R.layout.recyc_item, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(inflate);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return data.size();
}
}
class MyViewHolder extends RecyclerView.ViewHolder{
private final TextView item_title;
private final ImageView item_img;
public MyViewHolder(View itemView) {
super(itemView);
item_title = (TextView)itemView.findViewById(R.id.item_title);
item_img = (ImageView) itemView.findViewById(R.id.item_img);
}
}
// RecyclerView设置adapter 模式一 listview效果
layoutmaner = new LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);
myAdapter = new MyAdapter(getContext(),getData());
recyclerview_list.setLayoutManager(layoutmaner);
recyclerview_list.setAdapter(myAdapter);
// RecyclerView设置adapter 模式二 gridview效果
layoutmaner= new GridLayoutManager(getContext(),2);
myAdapter = new MyAdapter(getContext(),getData());
recyclerview_list.setLayoutManager(layoutmaner);
recyclerview_list.setAdapter(myAdapter);
// RecyclerView设置adapter 模式三 瀑布流效果
在adapter中的onBindViewHolder给item 设置一个随机高度
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// 随机高度, 模拟瀑布效果.
if (mHeights.size() <= position) {
mHeights.add((int) (300 + Math.random() * 600));
}
ViewGroup.LayoutParams lp = holder.item_title.getLayoutParams();
lp.height = mHeights.get(position);
holder.item_img.setLayoutParams(lp);
}
layoutmaner = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
myAdapter = new MyAdapter(getContext(),getData());
recyclerview_list.setLayoutManager(layoutmaner);
recyclerview_list.setAdapter(myAdapter);
这这是三种效果 当然还有很多效果并没有在这里展现 等待我们一起挖掘 demo 源码就不上了 真的很简单 随便研究一下 就可以写的出来 自己动手丰衣食足 哈哈 加油哦
关于本效果的外层ui 实现 可阅读 —–>>> https://blog.csdn.net/naide_s/article/details/79755550