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语言中使用Stringr进行字符串操作
			今天来学习下R中字符串处理操作,主要是stringr包中的字符串处理函数的用法. 先导入stringr包,library(stringr),require(stringr),或者stringr::函数 ... 
- 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 主机模式 ... 
- 浅谈Facebook的服务器架构
			导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注.CSDN博主yanghehong在他自己最新的一篇博客< Fa ... 
- 内存管理malloc 2
			malloc可以在函数指针内使用.#include <stdio.h> #include <stdlib.h> char * get_string() { //char s[] ... 
- jquery chosen onchange 值改变时触发方法
			jquery chosen onchange 值改变时触发方法如下:$(".chzn-select").chosen().on("change", functi ... 
- CPF C#跨平台UI框架发布安卓端预览版
			CPF的安卓端适配采用Xamarin的安卓绑定库,而不是Xamarin.Form.CPF和flutter差不多,完全由skia绘制,基本不依赖原生控件. 当前还只是预览版,不建议用在正式项目中. 可能 ... 
- day03 Django目录结构与reques对象方法
			day03 Django目录结构与reques对象方法 今日内容概要 django主要目录结构 创建app注意事项(重点) djago小白必会三板斧 静态文件配置(登录功能) requeste对象方法 ... 
- ubuntu18.10搜狗输入法的安装
			记录一下 1.卸载ibus ubuntu默认使用ibus管理输入法,官方推荐使用fcitx.我们先卸载ibus sudo apt-get remove ibus 清除ibus配置,如果没有设置 sud ... 
- MySQL索引背后的数据结构及算法原理 【转】
			摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ... 
- Linux基础命令---sendmail发送邮件
			sendmail sendmail是postfix中的一个发送邮件的代理程序,它负责发送邮件到远程服务器,并且可以接收邮件.sendmail在发送邮件的时候,默认从标砖输入读取内容,以".& ... 
