简介

在上一篇博文中,介绍了大家已经很熟悉的布局控件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 展示图片的更多相关文章

  1. Android 控件使用教程(三)—— NineGridImageView 九宫格展示图片

    引子 上文降到RecyclerView的使用,确实非常方便易用,而且样式多样,很灵活.但在图像展示时,经常有朋友圈和微博等9张图以内的图片展示需求,这时候,不是一个可以无限下滑的RecyclerVew ...

  2. Android 控件使用教程(一)—— ListView 展示图片

    起因 最近在看一些开源项目时,经常看到了RecyclerView,这是安卓5.0推出的一个新的控件,可以代替传统的ListView,已经这么久了还没有用过,所以决定试一试.另外在做这个的工程中看到了另 ...

  3. 【Android - 控件】之MD - RecyclerView的使用

    RecyclerView是Android 5.0新特性——Material Design中的一个控件,它将ListView.GridView整合到一起,可以使用极少的代码在ListView.GridV ...

  4. 一步一步学android控件(之二十五)—— SeekBar

    SeekBar扩展自ProgressBar——在ProgressBar的基础上添加了一个用户可以拖拽的thum. SeekBar.OnSeekBarChangeListener是接收SeekBar进度 ...

  5. Android控件-TabHost(二)

    这边再补充一种更为灵活的方法,可以把TabWidget隐藏,用(RadioGroup+RadioButton)来代替,并利用监听器的方式来实现监听点击点击跳转Activity. 在讲解之前,先补充几点 ...

  6. Android控件RecyclerView的基本用法

    Android控件RecyclerView的基本用法 转 https://www.jianshu.com/p/e71a4b73098f   github: https://github.com/Cym ...

  7. Qt报表控件NCReport教程:添加报表字段

    NCReport是一款轻量级.快速.多平台.简单易用的基于Qt toolkit的C++编写的报表解决方案,目前主要包括报表渲染库和报表设计器GUI应用程序. 在前面的文章<报表控件NCRepor ...

  8. UIAutomator定位Android控件的方法

    UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...

  9. Android控件系列之CheckBox

    学习目的: 1.掌握在Android中如何建立CheckBox 2.掌握CheckBox的常用属性 3.掌握CheckBox选中状态变换的事件(监听器) CheckBox简介: CheckBox和Bu ...

随机推荐

  1. 在R语言中使用Stringr进行字符串操作

    今天来学习下R中字符串处理操作,主要是stringr包中的字符串处理函数的用法. 先导入stringr包,library(stringr),require(stringr),或者stringr::函数 ...

  2. VMware和Centos的安装及配置

    目录 1. 安装VMware 2. 安装CentOS6及配置 2.1 Centos安装 2.1.1 配置网络连接的三种形式 2.1.1.1 桥连接 2.1.1.2 NAT模式 2.1.1.3 主机模式 ...

  3. 浅谈Facebook的服务器架构

    导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注.CSDN博主yanghehong在他自己最新的一篇博客< Fa ...

  4. 内存管理malloc 2

    malloc可以在函数指针内使用.#include <stdio.h> #include <stdlib.h> char * get_string() { //char s[] ...

  5. jquery chosen onchange 值改变时触发方法

    jquery chosen onchange 值改变时触发方法如下:$(".chzn-select").chosen().on("change", functi ...

  6. CPF C#跨平台UI框架发布安卓端预览版

    CPF的安卓端适配采用Xamarin的安卓绑定库,而不是Xamarin.Form.CPF和flutter差不多,完全由skia绘制,基本不依赖原生控件. 当前还只是预览版,不建议用在正式项目中. 可能 ...

  7. day03 Django目录结构与reques对象方法

    day03 Django目录结构与reques对象方法 今日内容概要 django主要目录结构 创建app注意事项(重点) djago小白必会三板斧 静态文件配置(登录功能) requeste对象方法 ...

  8. ubuntu18.10搜狗输入法的安装

    记录一下 1.卸载ibus ubuntu默认使用ibus管理输入法,官方推荐使用fcitx.我们先卸载ibus sudo apt-get remove ibus 清除ibus配置,如果没有设置 sud ...

  9. MySQL索引背后的数据结构及算法原理 【转】

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  10. Linux基础命令---sendmail发送邮件

    sendmail sendmail是postfix中的一个发送邮件的代理程序,它负责发送邮件到远程服务器,并且可以接收邮件.sendmail在发送邮件的时候,默认从标砖输入读取内容,以".& ...