RecyclerView 制作瀑布流图片
这是瀑布流的效果图
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 制作瀑布流图片的更多相关文章
- jQuery制作瀑布流(转)
“瀑布流布局”随着pinterest网的流行而出名,现在国内使用这种风格布局的网站也越来越多,比如说Mark之,蘑菇街,点点网,哇哦等等.我第一次听到这个布局名称是来自于“乔花写的<瀑布流布局浅 ...
- Android RecyclerView(瀑布流)水平/垂直方向分割线
Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...
- RecyclerView实现瀑布流效果(图文详解+源码奉送)
最近有时间研究了一下RecyclerView,果然功能强大啊,能实现的效果还是比较多的,那么今天给大家介绍一个用RecyclerView实现的瀑布流效果. 先来一张效果图: 看看怎么实现吧: 整体工程 ...
- RecyclerView实现瀑布流效果(二)
在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutManager.GridLayoutManager.StaggeredGridLayoutMan ...
- [Android Pro] RecyclerView实现瀑布流效果(二)
referece to : http://blog.csdn.net/u010687392 在上篇中我们知道RecyclerView中默认给我们提供了三种布局管理器,分别是LinearLayoutMa ...
- 使用RecyclerView实现瀑布流的效果
主函数: public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; privat ...
- 初步使用RecyclerView实现瀑布流
先看效果 关于RecyclerView,真的是很强大. 个人觉得主要方便的地方是 1.直接可以设置条目布局,通过setLayoutManager LinearLayoutManager:线性布局,横向 ...
- 用RecyclerView实现瀑布流
首先建立一个 PbRecyclerViewActivity.java文件: 1 public class PbRecyclerViewActivity extends AppCompatActivit ...
- 基于RecyclerView的瀑布流实现
fragment的布局: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...
随机推荐
- python requests的安装与简单运用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib ...
- LoadRunner连接Genymotion
- Hihocoder 1059 String Matching Content Length
预处理下连续相等的字符个数其实主要是看是否满3个 后面递推的时候特判下+1上次递推[i-1,j-1]不是来自[i-2,j-1]也不是来自[i-1,j-2]其实就是只来自[i-4,j-4]+3,和[i- ...
- CAS学习笔记(二)—— cas server端的login-webflow详细流程
一.配置文件介绍 关于spring的配置信息只需放入WEB-INF/spring-configuration目录即可,cas启动时会自动加载.这个目录下的spring配置文件几乎不需要改动. 在web ...
- 创建支持eclipse的多模块maven项目
通过maven可以创建多个关联模块的项目(Multiple Module Projects).由一个总的模块,下面包含多个子模块(子模块还可以包含子模块). 这种maven功能能支持大型的项目构建,往 ...
- java在cmd下编译和执行引用jar的类
java编译和执行引用第三方jarcmd 1.将上面的ojdbc14.jar文件,与调用程序复制到系统D盘的根目录下,切记:因为调用程序在wym.database包下,所以需要将类其所在的包一起拷贝 ...
- 日常开发使用GIT命令
git是一种分布式的版本管理工具,现在我总结下日常使用的git命令 1)检出 git clone 地址 --检出代码 #这里的地址是代码池的地址,如Github或bitbucket 2)增加文件 gi ...
- 【原创】我所理解的自动更新-APP发布与后台发布
发布后台 创建渠道:添加新的渠道,设置渠道名称,自动生成渠道id. 查看渠道:查看渠道基本信息,渠道app版本号,资源版本号,是否开启更新. 创建/更新APP:选择打包ios,androi ...
- “error LNK2019: 无法解析的外部符号”之分析
最近在用VS 2008开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019. 百度一下讲的并不够全面,反正都没解决我的问题. error LNK2019问题在VC 6.0中是error LNK ...
- openlayers 3监听地图分辨率变化事件
map.getView().on('change:resolution',checkZoom);//checkZoom为调用的函数 function checkZoom() { // alert(&q ...