这是瀑布流的效果图

RecyclerView(ListView的升级版)

加载图片用的是第三方图片加载框架

-------------------------------------

在Xml中

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/gr_id"
android:layout_width="match_parent" android:layout_height="match_parent"/>
</RelativeLayout>

这是Activity 初始化组件

 public class MainActivity extends AppCompatActivity {

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.gr_id);
//设置布局管理器
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));
//添加分隔符
recyclerView.addItemDecoration(new DividerGridItemDecoration(this)); MyAdapter adapter = new MyAdapter(this, Arrays.asList(ImageUrlArrays.IMAGE_URL_ARRAYS));
//设置Adapter
recyclerView.setAdapter(adapter); //为子条目设置点击事件
adapter.setOnRecyclerViewItemViewListener(new RecyclerViewItemViewListener() {
@Override
public void onClickListener(RecyclerView.ViewHolder viewHolder, int position) {
Toast.makeText(MainActivity.this, "点击事件:"+position, Toast.LENGTH_SHORT).show();
} @Override
public void onLongClickListener(RecyclerView.ViewHolder viewHolder, int position) {
Toast.makeText(MainActivity.this, "长按事件:"+position, Toast.LENGTH_SHORT).show();
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return super.onCreateOptionsMenu(menu);
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.clear_disk://清除硬盘缓存
Toast.makeText(this, "清除硬盘缓存!", Toast.LENGTH_SHORT).show();
WXHLImageLoader.getInstance().clearDiskCache();
break;
case R.id.clear_id://清除内存缓存
Toast.makeText(this, "清除内存缓存!", Toast.LENGTH_SHORT).show();
WXHLImageLoader.getInstance().clearMemoryCache();
break;
}
return super.onOptionsItemSelected(item);
}
}

需要设置数据就要newAdapter 这个Adapter是必须继承RecyclerView的Adapter 其中还要传入ViewHolder

这个ViewHolder也是要继承RecyclerView的ViewHolder

 class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{

     private Context context;
private List<String> list;
private List<Integer> heightList;
private RecyclerViewItemViewListener listener ; public MyAdapter(Context context, List<String> list) {
this.context = context;
this.list = list; heightList = new ArrayList<>();
for (int i = 0; i < list.size() ; i++) {
int height = (int) (Math.random()*400 + 400);
heightList.add(height);
} } /**
* 给itemView监听器赋值
* @param listener
*/
public void setOnRecyclerViewItemViewListener(RecyclerViewItemViewListener listener){
this.listener = listener;
} int i = 0;
/**
* 创建ViewHolder对contentView进行复用
* @param parent
* @param viewType
* @return
*/
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
i++;
L.e("----------------onCreateViewHolder-----------i:"+i);
View contentView = LayoutInflater.from(context).inflate(R.layout.activity_main_item,parent,false);
return new ViewHolder(contentView);
} /**
* 进行数据绑定,itemView设置数据
* @param holder
* @param position
*/
@Override
public void onBindViewHolder(ViewHolder holder, int position) { //改变holder.button的高度
int height = heightList.get(position);
ViewGroup.LayoutParams lp = holder.imageView.getLayoutParams();
lp.height = height;
holder.imageView.setLayoutParams(lp); L.e("----------------onBindViewHolder-----------position:"+position);
WXHLImageLoader.getInstance().displayImage(list.get(position),holder.imageView);
holder.setPosition(position);
} @Override
public int getItemCount() {
return list.size();
} class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{
ImageView imageView;
private int position; public ViewHolder(View itemView) {
super(itemView);
//为ViewHolder中的组件进行赋值
imageView = (ImageView) itemView.findViewById(R.id.id_but); if(listener != null){//判断RecyclerViewItemViewListener是否为空,
// 若为空,不能给子条目设置点击事件,否则会出现空指针
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
} public void setPosition(int position) {
this.position = position;
} @Override
public void onClick(View v) {
switch (v.getId()){
case R.id.item_id://itemView的点击事件
listener.onClickListener(this,position);
break;
}
} @Override
public boolean onLongClick(View v) {//itemView的长按事件
listener.onLongClickListener(this,position);
return true;
}
}
}

在用RecyclerView时  是没有监听事件的  这个事件需要我们自己去写

新建一个接口

 public interface RecyclerViewItemViewListener {

     /**
* itemView的点击事件
* @param viewHolder
* @param position
*/
void onClickListener(RecyclerView.ViewHolder viewHolder, int position); /**
* 是itemView的长按事件
* @param viewHolder
* @param position
*/
void onLongClickListener(RecyclerView.ViewHolder viewHolder, int position); }

RecyclerView 制作瀑布流图片的更多相关文章

  1. jQuery制作瀑布流(转)

    “瀑布流布局”随着pinterest网的流行而出名,现在国内使用这种风格布局的网站也越来越多,比如说Mark之,蘑菇街,点点网,哇哦等等.我第一次听到这个布局名称是来自于“乔花写的<瀑布流布局浅 ...

  2. Android RecyclerView(瀑布流)水平/垂直方向分割线

     Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...

  3. RecyclerView实现瀑布流效果(图文详解+源码奉送)

    最近有时间研究了一下RecyclerView,果然功能强大啊,能实现的效果还是比较多的,那么今天给大家介绍一个用RecyclerView实现的瀑布流效果. 先来一张效果图: 看看怎么实现吧: 整体工程 ...

  4. RecyclerView实现瀑布流效果(二)

    在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutManager.GridLayoutManager.StaggeredGridLayoutMan ...

  5. [Android Pro] RecyclerView实现瀑布流效果(二)

    referece to : http://blog.csdn.net/u010687392 在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutMa ...

  6. 使用RecyclerView实现瀑布流的效果

    主函数: public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; privat ...

  7. 初步使用RecyclerView实现瀑布流

    先看效果 关于RecyclerView,真的是很强大. 个人觉得主要方便的地方是 1.直接可以设置条目布局,通过setLayoutManager LinearLayoutManager:线性布局,横向 ...

  8. 用RecyclerView实现瀑布流

    首先建立一个 PbRecyclerViewActivity.java文件: 1 public class PbRecyclerViewActivity extends AppCompatActivit ...

  9. 基于RecyclerView的瀑布流实现

    fragment的布局: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

随机推荐

  1. jtree添加节点

    利用Model添加了节点之后,需要reload树

  2. HDU 5047 Sawtooth(大数优化+递推公式)

    http://acm.hdu.edu.cn/showproblem.php?pid=5047 题目大意: 给n条样子像“m”的折线,求它们能把二维平面分成的面最多是多少. 解题思路: 我们发现直线1条 ...

  3. [原创]java WEB学习笔记109:Spring学习---spring对JDBC的支持:使用 JdbcTemplate 查询数据库,简化 JDBC 模板查询,在 JDBC 模板中使用具名参数两种实现

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. C/C++之指针加减法

    C和C++中可对指针进行加减,但对其进行乘除则基本无实际意义.一般来说,对指针进行减法的前提是减数和被减数均指向同一数组.加法同理.需要注意的是,两个指针的减法,结果是两个地址之间索引变量的数目,而不 ...

  5. ebox学习之SD & fat 配置

    fatfs可配置项很多,相关的配置均在ffconfig.h文件中 /*----------------------------------------------------------------- ...

  6. UVa 10917 Dijkstra

    本来就是水题一道. 题意:一个人要从点1去到点2,中间还有很多点和很多条边.问你如果他每次走的边(a,b)都满足:a点到目标点的最短距离<b点到目标点的最短距离,那么他从点1出发到点2总共有多少 ...

  7. selenium查找ifame其中的元素

    废话不多说,直接上代码 from selenium import webdriver browser = webdriver.xx() browser.get(url) browser.swith_t ...

  8. linux内核的makefile.txt讲解

    linux内核的linux-3.6.5\Documentation\kbuild\makefiles.txt Linux Kernel Makefiles This document describe ...

  9. CSS3 笔记三(Shadow/Text/Web Fonts)

    CSS3 Shadow Effects text-shadow box-shadow 1> text-shadow The text-shadow property adds shadow to ...

  10. Bash:-set设置位置变量结合while和shift使用

    #!/bin/bash aaa=( ) bbb=(a b c d) set -- ${aaa[@]} ));do } shift done set -- echo "------------ ...