昨天想起了公司前一段时间需要实现的一个动效,用listView实现列表item的展开动画。最后由于时间关系,只是实现了展开效果,但是展开的过程中是没有添加动画效果的,整个展开列表是由一种十分生硬的方式直接弹出来的,体验非常不好。本周的工作量不大,就想看一下有没有更好的实现方式,就在网上找了一下,看到了Google提供的RecyclerView,就查了一下相关的资料,看到了一位国外大牛写的用RecyclerView实现的这种效果,就下载源码看了一下,非常简单的实现,但效果很好,就来这里记录一下,防止以后需要的时候找不到。这也是我的第一篇博客,算是翻译+转载了。在这里感谢一下那位大牛。

  好了,不说废话了。使用Google最新的列表控件需要添加一个jar包,我使用的时studio 的开发环境,所以只需要在build.gradle中添加一句代码compile ‘com.android.support:recyclerview-v7:21.+’就可以了。使用eclipse的童鞋可以在网上搜一下相关的jar包,有很多,就不提供下载地址了。

  下面开始上代码。

  首先是列表的item布局,这里只是两个textview,第一个tv是一个标题,也就是运行后界面上始终显示的一个文字;另外的一个textview就是默认隐藏的控件了,点击列表的item的时候隐藏的部分慢慢展开。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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:clickable="true"android:orientation="vertical"android:paddingBottom="10dp"android:paddingEnd="10dp"android:paddingLeft="30dp"android:paddingRight="10dp"android:paddingStart="30dp"android:paddingTop="20dp"><TextView
        android:id="@+id/contactName"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:text="Contact name"android:textAppearance="?android:attr/textAppearanceLarge"tools:ignore="HardcodedText"/><TextView
        android:id="@+id/infos"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/lipsum"android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>

  activity的界面布局就更简单了,只有一个列表控件。

<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="match_parent"tools:context=".MainActivity"><android.support.v7.widget.RecyclerViewandroid:id="@+id/rv"android:layout_width="match_parent"android:layout_height="match_parent"android:scrollbars="vertical" />
</FrameLayout>

  activity里的代码很少,只有几行,具体内容就看代码里的注释了。

public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main_activity);// 实例化控件final RecyclerView rv = (RecyclerView) findViewById(R.id.rv);// 设置启动列表的修改动画效果(默认为关闭状态)rv.getItemAnimator().setSupportsChangeAnimations(true);// 设置动画时长rv.getItemAnimator().setChangeDuration(300);rv.getItemAnimator().setMoveDuration(300);// 实现RecyclerView实现竖向列表展示模式final LinearLayoutManager layoutManager = new LinearLayoutManager(this);rv.setLayoutManager(layoutManager);// 实例化数据适配器并绑定在控件上final MainAdapter adapter = new MainAdapter();rv.setAdapter(adapter);}
}

  接下来就是最最重要的Adapter类了,之前的操作都和使用ListView差不多,google对RecyclerView的Adapter做了很多优化,让开发者使用起来更加的方便。

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {// 为列表提供数据的数据集合final String[] contacts = new String[]{"Amanda M. Ormond","Anquises Mejia Bustos","Bellisima Goodchild","Bodo Greenhand","Brogan Allan","Claudia Bosch","Elisa Asmara","Emile Barrientos","Ermes Toscano","Guarino Romani","Heike Dresner","Isobel Chamberlain","Ja'rod Kahnrah","Jessica L. Carrillo","Joseph M. Parks","Kabarann D'Ghor","Karol Perea Paredes","Kotkhe Varrin","Kiera Pritchard","Lavinia Sackville-Baggins","Manville Dubois","Marion Deslauriers","Mewael Semere","Negassi Girmay","Numilen Sarabia Solano","Ovidio Colombo","Simone Hahn","Stanley Ross","Spencer Porter","Tekle Ambessa","Yasmin Alexander"};// 列表展开标识int opened = -1;/*** 绑定item布局* @param parent* @param pos* @return*/@Overridepublic MainViewHolder onCreateViewHolder(ViewGroup parent, int pos) {return new MainViewHolder((ViewGroup) LayoutInflater.from(parent.getContext()).inflate(R.layout.main_item, parent, false));}/*** 绑定数据到控件* @param holder* @param pos*/@Overridepublic void onBindViewHolder(MainViewHolder holder, int pos) {final String contact = contacts[pos];holder.bind(pos, contact);}/*** 返回列表条数* @return*/@Overridepublic int getItemCount() {return contacts.length;}/*** 实例化控件等操作*/public class MainViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {// 标题public final TextView contactNameTV;// 隐藏的内容public final TextView infos;// 实例化public MainViewHolder(ViewGroup itemView) {super(itemView);contactNameTV = ((TextView) itemView.findViewById(R.id.contactName));infos = ((TextView) itemView.findViewById(R.id.infos));itemView.setOnClickListener(this);}// 此方法实现列表的展开和关闭public void bind(int pos, String name) {contactNameTV.setText(name);if (pos == opened)infos.setVisibility(View.VISIBLE);elseinfos.setVisibility(View.GONE);}/*** 为item添加点击效果* (recyclerView是不提供onItemClickListener的。所以列表的点击事件需要我们自己来实现)* @param v*/@Overridepublic void onClick(View v) {if (opened == getPosition()) {opened = -1;notifyItemChanged(getPosition());}else {int oldOpened = opened;opened = getPosition();notifyItemChanged(oldOpened);notifyItemChanged(opened);}}}
}

  所有的代码到这里就结束了,再次感谢各位前辈的贡献,让我们的开发之路走得更加顺畅,但路还是要自己来走。

RecyclerView体验简介 http://blog.iderzheng.com/first-date-with-recyclerview/

使用RecyclerView实现列表展开动画相关推荐

  1. 直播系统源代码实现RecyclerView折叠展开动画

    直播系统源代码实现RecyclerView折叠展开动画的相关代码 首先来看看布局文件 <?xml version="1.0" encoding="utf-8&quo ...

  2. 京东css3动画全屏海报_CSS3+HTML5+JS 实现一个块的收缩与展开动画效果

    最近在做项目时,发现CSS3中关于动画的技术,自己很少运用在项目中,平时一些列表块的收缩和展开动画效果,几乎都是使用 display 的 none 和 block,或者 visibility 的 hi ...

  3. 在几何画板中如何制作圆柱的侧面展开动画_基本尺规作图过程展示 | 几何画板...

    本期推出几个常见尺规作图示例(由几何画板制作,文末有获得源文件方式): 往期精彩 不容错过 展示圆锥曲线的形成过程 | 几何画板 用VBA批量格式打印座位号 |VBA应用 2020年最新高考过渡时期数 ...

  4. JQuery:实现列表展开和缩放

    <html> <head><script type="text/javascript" src="/jquery/jquery.js&quo ...

  5. 在几何画板中如何制作圆柱的侧面展开动画_倒计时与时钟演示 | 几何画板

    本期分享两个计时工具,分别是"倒计时"和"时钟",也是画板爱好者喜欢拿来练手的素材: 倒计时 操作提示:分别上下滑动左侧的四个滑块,设定倒计时时间,然后点击按钮 ...

  6. iOS之仿QQ好友列表展开收缩效果的实现

    使用UICollectionView实现 思路 很明显整体它是一个列表,它的分组是一个列表,它里面的好友列表也是一个列表,所以就可以使用组头来设置分组列表,使用cell设置好友列表: 当点击组头的时候 ...

  7. android开发 RecyclerView 瀑布列表布局

    android开发 RecyclerView 瀑布列表布局 1.写一个内容的自定义小布局: <?xml version="1.0" encoding="utf-8& ...

  8. html仿qq最小化怎么实现,JS仿QQ好友列表展开、收缩功能(第一篇)

    JS仿QQ好友列表展开.收缩功能(第一篇) 发布时间:2020-10-17 14:20:03 来源:脚本之家 阅读:96 作者:erdouzhang 效果图如下所示: html: 我的好友 张三 李四 ...

  9. jQuery 设计和自定义一个带展开动画效果的导航栏

    设计和自定义一个带展开动画效果的导航栏,尝试写了一个demo,加上设计和调试差不多写了一天吧. 这里就来讲讲如何从设计->写布局->写样式->写JS代码 完成一个完全自己设计的导航栏 ...

最新文章

  1. 志愿怎么填?洞察应届毕业生就业形式,把握未来求职方向 | 易观千帆行业案例
  2. 2K17能力值上90的11位球员,你怎么看?
  3. 微信浏览器的html5页面显示配置等问题汇集 1,禁止微信浏览器分享页面链接 (定点更新)...
  4. EasyExcel读写Excel的基本使用
  5. 【数据结构】线性表的链式存储-单链表
  6. C/C 宏替换详解
  7. 40:数组中只出现一次的数字
  8. 【转】SQL Server 索引结构及其使用(二)
  9. Pytorch —— 学习率调整策略
  10. MakerDAO 通过首个实体融资执行提案
  11. pycharm 设置虚拟工作空间_七、连Pycharm都不知道怎么用,学什么Python
  12. Windows平台CocosStudioV3.10安装配置(使用Cocos2d-xV3.17.2进行开发)
  13. mysql用utf-8_切记:永远不要在MySQL中使用UTF-8
  14. WPF-21:WPF实现仿安卓的图案密码键盘(改进)
  15. JavaSE基础学习
  16. android各版本市场占有率报告,百度报告:Android市场份额大增
  17. 贝尔商道赚钱思维36道第22道:船翻友尽、相忘江湖
  18. 计算机病毒狭义和广义的区别,狭义相对论和广义相对论的区别是什么?
  19. android模拟器安装
  20. MMDetection 快速开始,训练自定义数据集

热门文章

  1. 查看笔记本电脑型号等数据
  2. win10连接无线网一直在连接到服务器,Win10无线总是掉线怎么回事 Win10无线网络总是掉线的快速解决办法(超管用)...
  3. 联想笔记本修复计算机还原系统失败,联想电脑重置电脑失败怎么办
  4. 【WPS】未安装VBA支持库,无法运行文档中的宏。如需要启用宏功能,请点击这里了解详情。
  5. 英特尔 QSV 在 FFMPEG 中的使用(Linux)
  6. opencv学习手册(三)(线条识别)(更新中
  7. 【周末送新书】基于BERT模型的自然语言处理实战
  8. 微信壁纸小程序源码修复图片无法下载-完美运营版本
  9. Queen Collisions(分行列模拟)
  10. CAD“左手键”快捷命令表,大大提高绘图效率