这是瀑布流的效果图

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. Dapper

    前一段做一个技术分享关于dapper的,现在再总结一下,也好长时间没有更新博客了--,用到的东西 Dapper.AutoFac .AutoMapper.FluentValidation: 下面说一下D ...

  2. smarty 模板几个例子

    一.assign和display方法的使用以及几个变量调节器 header("content-type:text/html;charset=utf-8");//加载Smarty引擎 ...

  3. PhpStorm 4.0 & 5.0 部署本地Web应用 (转)

    1.创建新的项目(project),创建完成之后单击工具栏的应用运行/调试(Select Run/Debug Configuration)的下拉菜单弹出 Edit Cofigurations选项,单击 ...

  4. XPath、XQuery 以及 XSLT 函数

    存取函数 名称 说明 fn:node-name(node) 返回参数节点的节点名称. fn:nilled(node) 返回是否拒绝参数节点的布尔值. fn:data(item.item,...) 接受 ...

  5. windows shell api SHEmptyRecycleBin 清空回收站

    HRESULT SHEmptyRecycleBin( HWND hwnd, LPCTSTR pszRootPath, DWORD dwFlags ); hwnd 父窗口句柄 pszRootPath 将 ...

  6. Mysql 常用 SQL 语句集锦 转载(https://gold.xitu.io/post/584e7b298d6d81005456eb53)

    Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...

  7. mac 10.11 cocopods注意的地方

    最近安装cocoapods,遇到些新问题,安装过程纠结了一天,先是ruby版本的问题,解决掉了,后来又是ruby下载cocoapods慢的问题,尝试了好几遍都下载不成功.最后也是不断尝试和查询,算是安 ...

  8. Hadoop namenode无法启动

    最近遇到了一个问题,执行start-all.sh的时候发现JPS一下namenode没有启动        每次开机都得重新格式化一下namenode才可以        其实问题就出在tmp文件,默 ...

  9. url编码

    url编码 情况1:网址路径中包含汉字 打开IE,输入网址”http://zh.wikipedia.org/wiki/春节”.注意,”春节”这两个字此时是网址路径的一部分. 查看HTTP请求的头信息, ...

  10. N久没写过东西了..写个最近在研究的程序

    import numpy as np import matplotlib.pyplot as plt #a = np.matrix([[1,1.15],[1,1.9],[1,3.06],[1,4.66 ...