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 ...
随机推荐
- Leetcode: Ones and Zeroes
In the computer world, use restricted resource you have to generate maximum benefit is what we alway ...
- workerman centos 7 开机自动启动
第一步: vim /lib/systemd/system/workerman.service 第二步:复制以下代码保存退出,注意修改你的workerman路径 [Unit] Description=w ...
- PHP自带防SQL攻击函数区别
为了防止SQL注入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全上的初步处理,也即Magic Quotes.(php.ini magic_quotes_gpc).如果m ...
- 夺命雷公狗-----React---15--三元运算符
<!DOCTYPE> <html> <head> <meta charset="utf-8"> <title></ ...
- [Ubuntu] change mouse scrolling between standard and natural
Standard: sudo vi .Xmodmap insert the content as below pointer = Natural: sudo vi .Xmodmap insert th ...
- asp.net 事件加载顺序
下面是母版页与内容页合并后事件的发生顺序: 母版页控件 Init 事件. 内容控件 Init 事件. 母版页 Init 事件. 内容页 Init 事件. 内容页 Load 事件. 母版页 Load 事 ...
- MySQL MMM 双主在Failover时挂起
两台MySQL服务器,版本Percona 5.5.35,配置双主,装在Centos 6.4下 Master1 db1,172.21.120.160(真实IP),172.21.120.173(Writ ...
- iOS 解决图片上传到服务器旋转90度的问题(图片倒置)
//使用swift的朋友们可以,把这个所在的类的.h,在-Header-Swift.h中一用一下. - (UIImage *)fixOrientation:(UIImage *)aImage { if ...
- 卓越精Forsk.Atoll.v3.3.2.10366无线网络
卓越精Forsk.Atoll.v3.3.2.10366无线网络 Atoll是法国 FORSK 公司开发的,是一个全面的.基于Windows的.支持2G.3G.4G多种技术,用户界面 友好的无线网络规划 ...
- Prince2七大主题之风险
Prince2七大主题之风险 我们前几个节学习了PRINCE2七大主题的商业论证.组织.质量和计划,今天我们开展对于风险模块的讲解. 风险:目的是识别.评估和控制不确定性,从而提高项目的成功率.P ...