Android RecycleView瀑布流点击吐丝、长按删除,很炫酷的一个列表展示
2018-03-19 09:23
549 查看
RecycleView是5.0之后推出的一个新控件,所以使用就要先导入一个依赖包:
compile 'com.android.support:recyclerview-v7:22.2.1'
2.实现的效果挺好看的,需要的赶紧来试一下,真的感觉跟瀑布一样,虽然错乱,但是也形成的一个专属于它的风格,下面介绍一下怎么实现的: mRecy.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL) );这个是确定一共4列、方向his竖向。可以根据你所需要的进行设置。MainActivityimport java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
import android.support.v7.widget.StaggeredGridLayoutManager;
/**
* 瀑布流原理:其实就是动态的将recycle下的网格布局的每个item的高度进行动态随机设置--》LayoutParmas
* */
public class MainActivity extends Activity{
private RecyclerView mRecy;
private List<String> list;
private MyRecycleView adapter;
//适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化数据源
initList();
//初始化控件
initView();
}
private void initView() {
mRecy=(RecyclerView) findViewById(R.id.mRecy);
adapter=new MyRecycleView(MainActivity.this, list);
//spanCount:列数 orientation:线性方向
//StaggeredGridLayoutManager:recycleView下的实现gridView的管理器
mRecy.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL) );
mRecy.setAdapter(adapter);
//设置条目动画:默认的
mRecy.setItemAnimator(new DefaultItemAnimator());
//设置点击事件
onClick();
}
//点击事件其实是调用的适配器里面的点击事件
private void onClick() {
adapter.setOnItemClickListener(new MyRecycleView.onItemClickListerner() {
@Override
public void onLongItemClick(View view, int position) {
//调用适配器里面的删除的方法
adapter.RemoveView(position);
}
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this, "点击了第"+(position+1)+"条数据", 0).show();
}
});
}
private void initList() {
list=new ArrayList<String>();
for(int i=0;i<40;i++){
list.add("第"+(i+1)+"条数据");
}
}
}MyRecycleView mHeights.add((int)(150+Math.random()*300));//随机获取高度,添加到集合中这一句话实现了每个item的高度,但是都是随机给的高度,可以看出大大小小有点不相同。
activity_main<android.support.v7.widget.RecyclerView
android:id="@+id/mRecy"
android:layout_width
ae97
="match_parent"
android:layout_height="match_parent"
/>item
compile 'com.android.support:recyclerview-v7:22.2.1'
2.实现的效果挺好看的,需要的赶紧来试一下,真的感觉跟瀑布一样,虽然错乱,但是也形成的一个专属于它的风格,下面介绍一下怎么实现的: mRecy.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL) );这个是确定一共4列、方向his竖向。可以根据你所需要的进行设置。MainActivityimport java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
import android.support.v7.widget.StaggeredGridLayoutManager;
/**
* 瀑布流原理:其实就是动态的将recycle下的网格布局的每个item的高度进行动态随机设置--》LayoutParmas
* */
public class MainActivity extends Activity{
private RecyclerView mRecy;
private List<String> list;
private MyRecycleView adapter;
//适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化数据源
initList();
//初始化控件
initView();
}
private void initView() {
mRecy=(RecyclerView) findViewById(R.id.mRecy);
adapter=new MyRecycleView(MainActivity.this, list);
//spanCount:列数 orientation:线性方向
//StaggeredGridLayoutManager:recycleView下的实现gridView的管理器
mRecy.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL) );
mRecy.setAdapter(adapter);
//设置条目动画:默认的
mRecy.setItemAnimator(new DefaultItemAnimator());
//设置点击事件
onClick();
}
//点击事件其实是调用的适配器里面的点击事件
private void onClick() {
adapter.setOnItemClickListener(new MyRecycleView.onItemClickListerner() {
@Override
public void onLongItemClick(View view, int position) {
//调用适配器里面的删除的方法
adapter.RemoveView(position);
}
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this, "点击了第"+(position+1)+"条数据", 0).show();
}
});
}
private void initList() {
list=new ArrayList<String>();
for(int i=0;i<40;i++){
list.add("第"+(i+1)+"条数据");
}
}
}MyRecycleView mHeights.add((int)(150+Math.random()*300));//随机获取高度,添加到集合中这一句话实现了每个item的高度,但是都是随机给的高度,可以看出大大小小有点不相同。
import java.util.ArrayList; import java.util.List; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.TextView; /* * recycleView 适配器 * */ public class MyRecycleView extends RecyclerView.Adapter<MyRecycleView.MyViewHolder>{ private Context ctx; private List<String> list; private List<Integer> mHeights;//这个是每个item的随机高度集合 private onItemClickListerner listener;//自己写的回调接口 public MyRecycleView(Context ctx,List<String> list) { this.ctx=ctx; this.list=list; //初始化item的随机高度,准备后期动态添加 mHeights=new ArrayList<Integer>(); for(int i=0;i<list.size();i++){ mHeights.add((int)(150+Math.random()*300));//随机获取高度,添加到集合中 } } @Override public int getItemCount() { return list.size(); } @Override public void onBindViewHolder(final MyViewHolder holder, int position) { //动态更改item的高度啊 LayoutParams lp=holder.mTv.getLayoutParams(); lp.height=mHeights.get(position); holder.mTv.setLayoutParams(lp); holder.mTv.setText(list.get(position)); //设置回调 if(listener!=null){ holder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int pos=holder.getAdapterPosition(); //回调 listener.onItemClick(holder.itemView, pos); } }); holder.itemView.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos=holder.getAdapterPosition(); listener.onLongItemClick(holder.itemView, pos); // RemoveView(pos); return false; } }); } } @Override public MyRecycleView.MyViewHolder onCreateViewHolder(ViewGroup view, int position) { //c初始化及导入item布局 给holder MyViewHolder holder=new MyViewHolder(View.inflate(ctx, R.layout.item, null)); return holder; } // 自己创建的内部类,让它继承自recycleView下的ViewHolder class MyViewHolder extends ViewHolder{ TextView mTv; public MyViewHolder(View view) { super(view); //找id mTv=(TextView) view.findViewById(R.id.mTv); } } //自己定义的回调接口 public interface onItemClickListerner{ void onItemClick(View view,int position); void onLongItemClick(View view,int position); } //设置回调接口的方法 public void setOnItemClickListener(onItemClickListerner listener){ this.listener=listener; } //删除选中条目的方法 public void RemoveView(int position){ list.remove(position); notifyItemRemoved(position); } }xml.布局
activity_main<android.support.v7.widget.RecyclerView
android:id="@+id/mRecy"
android:layout_width
ae97
="match_parent"
android:layout_height="match_parent"
/>item
<?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="match_parent"> <TextView android:id="@+id/mTv" android:layout_width="100dp" android:layout_height="100dp" android:gravity="center" android:background="#28c8b7" android:layout_marginTop="5dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginBottom="5dp" android:text="1" /> </LinearLayout>//如发现一个类式的,那是之前使用的号,为了给大家讲解的更清晰,就又申请了一个博客。
相关文章推荐
- Android RecycleView瀑布流点击吐丝、长按删除,很炫酷的一个列表展示
- recycleview 使用侧滑删除 android 6.0机型出现item抖动;列表一屏以上,点击后面的item(需要滚动查看了) 然后马上会往上滚动回首个item,滚回第一项
- 利用RecycleView实现类似ListView的Item点击,长按等操作事件以及点击后每一项在添加一个列表
- Android实战,实现文本读取,实现assets下资源文本的读取,实现l列表下隐藏TextView点击显示
- Android自学之路,RecycleView的使用,添加与删除
- android webview点击返回键返回上一个html
- Android一个Fragment展示列表网络数据
- android webview点击返回键回到上一个html
- Android同一个TevtView显示不同颜色的文字,添加不同的点击事件。
- Android 自定义View 慢慢画一个不同颜色扇形的圆,点击圆上不同颜色扇形区域返回不同颜色
- Android RecycleView(三)——增加点击事件
- 优雅地实现RecycleView的点击、拖动、和侧滑删除
- android删除一个view中的子view
- android ViewGroup删除子视图时应该注意的一个问题
- TimeLine -- Android 列表(ListView或者RecycleView)中时间线的效果
- Android实现RecyclerView自定义列表、点击事件以及下拉刷新
- 手把手带你做一个超炫酷loading成功动画view Android自定义view
- android开发游记:textview超过长度点击展开自动滚动(在一个TextView中实现,不增加布局复杂度)
- Android 仿蘑菇街列表弹出和瀑布流 (ScrollView+RelativeLayout实现)
- Android使用RecyclerView实现自定义列表、点击事件以及下拉刷新