Android 控件使用教程(二)—— RecyclerView 展示图片
简介
在上一篇博文中,介绍了大家已经很熟悉的布局控件ListView,在这篇文章中,我将使用比较新、功能也更强大的RecyclerView.
RecyclerView
首先,要用这个控件,你需要在gradle文件中添加包的引用(配合官方CardView使用)
compile 'com.android.support:cardview-v7:23.0.1'
compile 'com.android.support:recyclerview-v7:23.0.1'
在actvity_recyclerview.xml文件中定义布局:
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_recycleview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:padding="2dp"
android:scrollbarStyle="outsideOverlay"
android:scrollbars="vertical"/>

和ListView文章中类似的代码声明:
@Bind(R.id.rv_recycleview)
RecyclerView rv_recyclerview;
ButterKnife.bind(this);
对于RecyclerView需要进行LayoutManager的配置,这个是和ListView一样的线性显示:
rv_recyclerview.setLayoutManager(new LinearLayoutManager(this));//这里用线性显示 类似于listview
获取数据的方法参考上篇文章ListView,或者直接查看我的开源代码库,在此不再赘述。下面介绍RecyclerView的自定义Adapter.
public class NormalRecyclerViewAdapter extends RecyclerView.Adapter<NormalRecyclerViewAdapter.NormalImageHolder> {
private final LayoutInflater mLayoutInflater;
private final Context mContext;
private List<String> list;
public NormalRecyclerViewAdapter(Context context, List<String> urls) {
this.list = urls;
this.mContext = context;
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public NormalImageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new NormalImageHolder(mLayoutInflater.inflate(R.layout.item_image, parent, false));
}
@Override
public void onBindViewHolder(NormalImageHolder holder, int position) {
Picasso.with(mContext)
.load(list.get(position))
.into(holder.mPicture);
}
@Override
public int getItemCount() {
return list.size();
}
public static class NormalImageHolder extends RecyclerView.ViewHolder {
@Bind(R.id.picture)
ImageView mPicture;
NormalImageHolder(View view) {
super(view);
ButterKnife.bind(this, view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("NormalTextViewHolder", "onClick--> position = " + getPosition());
}
});
}
}
}
这是效果:

RecyclerView很方便的更改样式。这是设置成两个竖列的样式代码:
rv_recyclerview.setLayoutManager(new GridLayoutManager(this, 2));

图片展示不紧凑是因为宽和高的问题,在item_image.xml配置文件中修改宽和高如下:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:foreground="?selectableItemBackground">
<ImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="200dp"
android:cropToPadding="false"
android:scaleType="centerCrop"
tools:ignore="ContentDescription"
tools:src="@color/primary_light"/>
</FrameLayout>
这样就可以比较好的效果:

同样可以很简单实现瀑布流:
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, OrientationHelper.VERTICAL));//这里用线性宫格显示 类似于瀑布流
此时的item_image.xml为:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:foreground="?selectableItemBackground">
<ImageView
android:id="@+id/picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
tools:ignore="ContentDescription"
tools:src="@color/primary_light"/>
</FrameLayout>
结果:

简单到很神奇。
下一篇将讲解九宫格图片布局NineGridImageView.
Android 控件使用教程(二)—— RecyclerView 展示图片的更多相关文章
- Android 控件使用教程(三)—— NineGridImageView 九宫格展示图片
引子 上文降到RecyclerView的使用,确实非常方便易用,而且样式多样,很灵活.但在图像展示时,经常有朋友圈和微博等9张图以内的图片展示需求,这时候,不是一个可以无限下滑的RecyclerVew ...
- Android 控件使用教程(一)—— ListView 展示图片
起因 最近在看一些开源项目时,经常看到了RecyclerView,这是安卓5.0推出的一个新的控件,可以代替传统的ListView,已经这么久了还没有用过,所以决定试一试.另外在做这个的工程中看到了另 ...
- 【Android - 控件】之MD - RecyclerView的使用
RecyclerView是Android 5.0新特性——Material Design中的一个控件,它将ListView.GridView整合到一起,可以使用极少的代码在ListView.GridV ...
- 一步一步学android控件(之二十五)—— SeekBar
SeekBar扩展自ProgressBar——在ProgressBar的基础上添加了一个用户可以拖拽的thum. SeekBar.OnSeekBarChangeListener是接收SeekBar进度 ...
- Android控件-TabHost(二)
这边再补充一种更为灵活的方法,可以把TabWidget隐藏,用(RadioGroup+RadioButton)来代替,并利用监听器的方式来实现监听点击点击跳转Activity. 在讲解之前,先补充几点 ...
- Android控件RecyclerView的基本用法
Android控件RecyclerView的基本用法 转 https://www.jianshu.com/p/e71a4b73098f github: https://github.com/Cym ...
- Qt报表控件NCReport教程:添加报表字段
NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 在前面的文章<报表控件NCRepor ...
- UIAutomator定位Android控件的方法
UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...
- Android控件系列之CheckBox
学习目的: 1.掌握在Android中如何建立CheckBox 2.掌握CheckBox的常用属性 3.掌握CheckBox选中状态变换的事件(监听器) CheckBox简介: CheckBox和Bu ...
随机推荐
- 【R绘图】当图例映射color/shape等多个属性时,如何修改图例标题?
一般而言,我们修改ggplot2图例标题,常用以下三种方法: + guides(fill=guide_legend(title="New Legend Title")) + lab ...
- Linux之文件读取查看之cat、head、tail、tac、rev、more、less
Linux文件查看的命令有很多,如cat.head.tail.tac.rev.more.less等 1. cat之查看文件内容 NAME cat - 连接文件并在标准输出上打印(concatenate ...
- Echart显示后端mysql数据
一.基本思想 1.将数据存储在mysql数据库中 2.后端链接数据库,将数据库中的数据保存为json格式 3.将json格式数据使用ajax传到前端JSP页面中的Echarts 二.实现的关键点 1. ...
- day11 序列化组件、批量出入、自定义分页器
day11 序列化组件.批量出入.自定义分页器 今日内容详细 ajax实现删除二次提醒(普通版本) ajax结合第三方插件sweetalert实现二次提醒(样式好看些) ajax如何发送文件数据 aj ...
- C++ 成绩排名
1004 成绩排名 (20分) 读入 n(>)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 ...
- 4.2 rust 命令行参数
从命令行读取参数 use std::env; fn main() { let args: Vec<String> = env::args().collect(); println!(&q ...
- 【Java 泛型】之 <? super T> 和<? extends T> 中 super ,extends如何理解?有何异同?
Java 泛型 <? super T> 和<? extendsT>中 super ,extends怎么 理解?有何不同? 简介 前两篇文章介绍了泛型的基本用法.类型擦除以及泛型 ...
- 隐藏状态栏后tableview自动上移20个像素的问题
最近在开发过程中碰到一个很奇怪的问题,将状态栏隐藏掉之后,页面上的tableView会自动上移20个像素. 这是因为在iOS7.0之后,系统会自动调整scrollView的layout 和 conte ...
- MySQL(2):数据管理
一. 外键概念: 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键.由此可见,外键表示了两个关系之间的相关联系.以另一个关系的外键作主关键字的表被称为主表,具有此外键的表 ...
- Dubbo多协议支持
除了Dubbo服务暴露协议Dubbo协议外,Dubbo框架还支持另外8种服务暴露协议:RMI协议.Hessian协议.HTTP协议.WebService协议.Thrift协议.Memcached协议. ...