概述
RecyclerView实现简单的瀑布流
注意: 我这里只是实现一个简单的瀑布流效果,你可以在我的程序上加一些复杂的操作。
先看一下效果图:
如图所示,我这里只用了两张图片,并且苹果图片的宽250高250,草莓图片宽250高222,因为我在程序中没什么限制,所以如果你要用我的程序,实现上图所示的效果,请自己改一下图片的宽和高。
因为比较简单,我直接上代码了,注释都写上了,请看代码:
StaggeredActivity中的代码:
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import com.example.lenovo.review.R;
public class StaggeredActivity extends AppCompatActivity {
private RecyclerView mStaggered;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_staggered);
// 实例化对象
mStaggered = findViewById(R.id.recycler_stag);
// 定义一个瀑布流的布局管理器
RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
// 设置布局管理器为瀑布流
mStaggered.setLayoutManager(layoutManager);
// 设置适配器
mStaggered.setAdapter(new StagAdapter());
// 添加分隔线
mStaggered.addItemDecoration(new MyDecoration());
}
//设置分隔线
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);
outRect.set(5, 5, 5, 5);
}
}
}
StaggeredActivity的布局文件中的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#B3B3B3"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_stag"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
StagAdapter中的代码:
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.example.lenovo.review.R;
public class StagAdapter extends RecyclerView.Adapter<StagAdapter.MyViewHolder> {
class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView img;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
img = itemView.findViewById(R.id.stag_img);
}
}
@NonNull
@Override
public StagAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_stag_item, viewGroup, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull StagAdapter.MyViewHolder holder, int i) {
// 根据item的位置来显示不同的图片,这里设置是偶数位置显示苹果图片,奇数位置显示草莓图片
if (i % 2 == 0) {
// 这里是设置ImageView的图片源,我这里是drawable目录下的一个图片
holder.img.setImageResource(R.drawable.apple_250x250);
} else {
// 这也是设置图片
holder.img.setImageResource(R.drawable.blueberry_250_222);
}
}
// 显示的item的数量,这里我设置是显示50个item
@Override
public int getItemCount() {
return 50;
}
}
layout_stag_item.xml中的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/stag_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
/>
</LinearLayout>
最后
以上就是还单身小白菜为你收集整理的RecyclerView实现简单的瀑布流的全部内容,希望文章能够帮你解决RecyclerView实现简单的瀑布流所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复