1.StaggeredGridLayoutManager瀑布流
效果图
瀑布流效果图代码
RecyclerView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pu"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
RecyclerViewItem
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorWhite">
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
</LinearLayout>
Activity
public class PuRecyclerViewActivity extends AppCompatActivity {
private RecyclerView mRvPu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pu_recycler_view);
mRvPu = findViewById(R.id.rv_pu);
mRvPu.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
mRvPu.addItemDecoration(new MyDecoration());
mRvPu.setAdapter(new StaggeredAdapter(PuRecyclerViewActivity.this, new StaggeredAdapter.OnItemClickListener() {
@Override
public void onClick(int pos) {
Toast.makeText(PuRecyclerViewActivity.this, "点击:"+pos, Toast.LENGTH_SHORT).show();
}
}));
}
class MyDecoration extends RecyclerView.ItemDecoration {
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
int gap = getResources().getDimensionPixelOffset(R.dimen.dividerHeight);
outRect.set(gap,gap,gap,gap);
}
}
}
Adapter
public class StaggeredAdapter extends RecyclerView.Adapter<StaggeredAdapter.LinearViewHolder> {
private Context mContext;
private OnItemClickListener mListener;
public StaggeredAdapter(Context context, OnItemClickListener listener) {
mContext = context;
mListener = listener;
}
@NonNull
@Override
public StaggeredAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_staggered_recycler_view_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull StaggeredAdapter.LinearViewHolder holder, final int position) {
if (position % 2 == 0) {
holder.imageView.setImageResource(R.drawable.bg_ironman);
} else {
holder.imageView.setImageResource(R.drawable.image1);
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClick(position);
// Toast.makeText(mContext, "点击:" + position, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return 30;
}
class LinearViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
public LinearViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.iv);
}
}
public interface OnItemClickListener {
void onClick(int pos);
}
}
2.加载不同的ViewHolder
多个ViewHolder效果图item2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorWhite"
android:gravity="center">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:textSize="20sp"
android:textColor="#000"/>
<ImageView
android:id="@+id/tv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
ViewHolder2
class LinearViewHolder2 extends RecyclerView.ViewHolder {
private TextView textView;
private ImageView imageView;
public LinearViewHolder2(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.tv_title);
imageView = itemView.findViewById(R.id.tv_image);
}
}
Adapter
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == 0) {
return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item, parent, false));
} else {
return new LinearViewHolder2(LayoutInflater.from(mContext).inflate(R.layout.layout_linear_item2, parent, false));
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
if (getItemViewType(position) == 0) {
((LinearViewHolder)holder).textView.setText("Hello World!");
} else {
((LinearViewHolder2)holder).textView.setText("在奔跑!");
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClick(position);
// Toast.makeText(mContext, "点击:" + position, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemViewType(int position) {
if (position%2 == 0) {
return 0;
} else {
return 1;
}
}
3.XRecyclerView: addHeadView、addFootView、下拉刷新、上拉加载
Github链接XRecyclerView
网友评论