第一步先写依赖,recyclerview 的依赖会和appcompat的依赖冲突把recycler的依赖版本改成和 appcompat一样的就好(记住加网络权限) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' compile 'com.android.support:recyclerview-v7:25.3.1' compile files('libs/universal-image-loader-1.9.3-with-sources.jar') compile files('libs/glide-3.7.0.jar') compile 'com.yqritc:recyclerview-flexibledivider:1.4.0'这个是分割线的依赖 compile 'com.liaoinstan.springview:library:1.2.6' 接下来导入glide的包来读入图片 下面是布局 主页面的布局 就是一个springview包裹了一个recyclerview<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" tools:context="com.example.chenyunfeid.MainActivity"> <com.liaoinstan.springview.widget.SpringView android:id="@+id/sv" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> </com.liaoinstan.springview.widget.SpringView> </LinearLayout> 下面是viewholder要用的布局<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="300dp" /> </LinearLayout> 接下来是MainActivitypublic class MainActivity extends AppCompatActivity { //定义一个list List<String> list=new ArrayList<String>(); SpringView sp;//初始化控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 RecyclerView recyclerView= (RecyclerView) findViewById(R.id.recycler); sp = (SpringView) findViewById(R.id.sv); //往list里面增加数据 list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72"); list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72"); list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72"); list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg"); list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg"); list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg"); list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg"); list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72"); list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72"); list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72"); list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg"); list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg"); list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg"); list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg"); // LinearLayoutManager manager=new LinearLayoutManager(this); // StaggeredGridLayoutManager gridLayoutManager=new StaggeredGridLayoutManager(this); //设置管理者 new的部分可以换LinearLayoutManager 当前的是瀑布式布局 后面参数是几行的个数,和方向 recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL)); //设置适配器 参数是一个上下文,和list的集合 RecyckerAdaper adaper=new RecyckerAdaper(this,list); //启动适配器 recyclerView.setAdapter(adaper); //添加下划线 recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this) .color(Color.BLUE) .build()); //接口回调的方法,用来toast用的4.调用定义的构造方法 来完成接口回调 使用adaper adaper.setLLiencli(new RecyckerAdaper.Sitenner() { @Override public void click(View view, int position) { Toast.makeText(MainActivity.this,"wahahhaa",Toast.LENGTH_SHORT).show(); } @Override public void Longclick(View view, int position) { Toast.makeText(MainActivity.this,"niahhahahha",Toast.LENGTH_SHORT).show(); } }); //设置springview的头和尾 sp.setHeader(new DefaultHeader(this)); sp.setFooter(new DefaultFooter(this)); //设置springview的刷新和加载的方法 sp.setListener(new SpringView.OnFreshListener() { @Override public void onRefresh() { Toast.makeText(getApplicationContext(),"下拉刷新中",Toast.LENGTH_SHORT).show(); //这个方法就是在刷新或者加载1秒的时间后关闭 finishFreshAndLoad(); } @Override public void onLoadmore() { Toast.makeText(getApplicationContext(),"玩命加载中...",Toast.LENGTH_SHORT).show(); finishFreshAndLoad(); } }); } //来设置刷新时间的 private void finishFreshAndLoad() { new Handler().postDelayed(new Runnable() { @Override public void run() { sp.onFinishFreshAndLoad(); } }, 1000); } } 最后一个就是Adaper的类 在这里使用的接口回调public class RecyckerAdaper extends RecyclerView.Adapter<RecyckerAdaper.ViewHolder> { private Context context;//初始化上下文 public List list; //list集合 这个list集合没有参数 public int itemwidth; //定义一个宽 //重写一个有参的方法 public RecyckerAdaper(Context context, List list) { //上下文和集合 this.context = context; this.list = list; //获取屏幕的高和宽 WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); //得到的每个item的宽度 一行三个item itemwidth=width/3; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //加载布局 View view=LayoutInflater.from(context).inflate(R.layout.layout_item,null); // 返回ViewHolder的方法 return new ViewHolder(view); } @Override //绑定数据 public void onBindViewHolder(ViewHolder holder, final int position) { //Glide来加载图片 Glide.with(context).load(list.get(position)).into(holder.iv); //设置一个默认的图片 holder.iv.setImageResource(R.mipmap.ic_launcher); holder.tv.setText(position+""); //动态的来设置高宽的 LinearLayout.LayoutParams params= (LinearLayout.LayoutParams) holder.iv.getLayoutParams(); //给了一个指定的高 int itemheight=300; //最大限度是500 itemheight =new Random().nextInt(500); //判断这个高小于300的话 if(itemheight<300) { itemheight=300; } //设置宽度 params.width=itemwidth; //设置高度 params.height=itemheight; //把设置好的高和宽设置给图片 holder.iv.setLayoutParams(params); //给图片添加点击事件 holder.iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //3.调用构造方法里面的参数调用写的方法 if(sienclic!=null) { sienclic.click(v,position); } } }); //长按事件 holder.iv.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { sienclic.Longclick(v,position); return false; } }); } @Override //time的数量 public int getItemCount() { //返回集合的长度 return list.size(); } //定义的viewholder类 public class ViewHolder extends RecyclerView.ViewHolder { ImageView iv; TextView tv; //holder类 public ViewHolder(View itemView) { super(itemView); //初始化控件 iv= (ImageView) itemView.findViewById(R.id.iv); tv= (TextView) itemView.findViewById(R.id.tvv); } } //定义的接口回调 private Sitenner sienclic; //接口回调的步骤 1.定义一个接口 //2.设置一个构造方法 public void setLLiencli(Sitenner sienclic){ this.sienclic=sienclic; } //1.定义接口 写俩个方法 public interface Sitenner{ public void click(View view,int position); public void Longclick(View view,int position); } }
RecyclerView + SpringView 的混合使用
最新推荐文章于 2024-05-12 09:37:32 发布