原标题:Android使用RecycleView实现魅族手机通讯录界面

本文作者

本文由_小马快跑_投稿。

_小马快跑_的博客地址:

http://www.jianshu.com/u/185028550381

本文主要是通过模仿魅族通讯录,学习一下RecycleView的基本用法,水平有限,如有不当之处,欢迎批评指正,不胜感激!

先看通过RecycleView实现的一个效果图:

完整代码见github:

https://github.com/crazyqiang/AndroidStudy/blob/master/app/src/main/java/org/ninetripods/mq/study/recycle/ContactsActivity.java

Recycleview继承关系:

RecycleView的三个主要参与者:

1、LayoutManager

2、ItemAnimator

3、ItemDecoration

本文主要用到的是ItemAnimator和ItemDecoration。

1

Item动画 ItemAnimator

ItemAnimator是个抽象类,ItemAnimator子类用来管理ViewHolder的动画,官方已经实现了一个DefaultItemAnimator,它继承自SimpleItemAnimator,而SimpleItemAnimator继承自ItemAnimator。

SimpleItemAnimator是一个包装类,用来记录视图范围,决定当前ViewHolder是否执行移动、变化、添加和删除动画,如果想自定义动画可以通过继承SimpleItemAnimator来实现,github上已经有很多优秀的开源动画了,如:

https://github.com/gabrielemariotti/RecyclerViewItemAnimators

这里只展示一种从左边进入的动画效果,其余大家可以下载下源码查看:

注:这里动画position=1是写死了的,主要是为了方便看效果~

2

ItemDecoration

(1)基础知识

ItemDecoration是RecycleView的一个静态内部类,通过对每一个ItemView的边界添加特殊绘制和布局,从而影响每一个ItemView的边界,如绘制分割线、绘制悬浮框等等,ItemDecoration中有三个方法:

1、getItemOffsets()

2、onDraw()

3、onDrawOver()

所有的ItemDecorations绘制都是顺序执行,即:

onDraw() < Item View < onDrawOver(),

onDraw()可以用来绘制divider,但在此之前必须在getItemOffsets设置了padding范围,否则onDraw()的绘制是在ItemView的下面导致不可见;

onDrawOver()是绘制在最上层,所以可以用来绘制悬浮框等。

下面来看各个方法:

1、getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state)

内部调用outRect.set(int left, int top, int right, int bottom)来改变ItemView的边界,类似于给ItemView设置Padding,默认getItemOffsets不会影响ItemView的边界,即默认内部调用的是outRect.set(0, 0, 0, 0),如果想得到当前正在修饰的ItemView的位置,可以通过parent.getChildAdapterPosition(view)来获取。

2、onDraw(Canvas c, RecyclerView parent, RecyclerView.State state)

在画布canvas上进行绘制,onDraw()方法是在ItemView被绘制之前执行的,因此onDraw()的绘制是在ItemView下方。

3、onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)

在画布canvas上进行绘制,onDrawOver()方法是在ItemView被绘制之后执行的,因此onDrawOver()的绘制是在ItemView上方,可用来绘制本例中的悬浮框等。

(2)实现本例魅族通讯录的主要思路:

1、自定义ItemDecoration来绘制悬浮框及ItemView之上的分类Tag:

用来绘制每个ItemView的边距。

用来绘制最上面的悬浮框。

按需绘制ItemView上面的分类Tag。

2、绘制右侧导航栏:

首先自定义SideBar(SideBar extends View ) 绘制最右侧字母:

SideBar中绘制了导航字母并在onTouchEvent处理了滑动事件,当手指上下滑动时左侧有个圆跟着滑动,这里用的自定义IndexBar( IndexBar extends ViewGroup,IndexBar包含SideBar )来处理的。

当SideBar滑动处于MOVE状态时通过((IndexBar) getParent()).setDrawData()把一系列位置参数传到IndexBar中去:

主要是在onLayout中把SideBar排列到最右侧,并在onDraw中根据SideBar传过来的一系列位置参数来不断改变圆的位置。

这里要注意一下,自定义ViewGroup的onDraw()方法默认是不会调用的,如果想执行onDraw方法,可以通过下面两种方法:

1.设置透明背景:

在构造函数中:setBackgroundColor(Color.TRANSPARENT);

或者在xml中:android:background="@color/transparent"

2.或者可以在构造函数中添加setWillNotDraw(false);

本文例子中用到的其他三方库:

https://github.com/amulyakhare/TextDrawable

https://github.com/promeG/TinyPinyin

https://github.com/gabrielemariotti/RecyclerViewItemAnimators

如果你有想学习的文章直接留言,我会整理征稿。如果你有好的文章想和大家分享欢迎投稿,直接向我投递文章链接即可。返回搜狐,查看更多

责任编辑:

android 悬浮按钮 魅族,Android使用RecycleView实现魅族手机通讯录界面相关推荐

  1. android悬浮 按钮列表,Android悬浮菜单按钮FloatingActionButton实现

    [实例简介] Android悬浮菜单按钮FloatingActionButton实现,可直接拿到项目中集成使用.希望大家多多关注我的博客:https://blog.csdn.net/k57103983 ...

  2. android 悬浮按钮和可交互提示,悬浮按钮的使用原则

    当要用悬浮的时候,考虑下在哪使用?什么条件下使用?不使用行不行?使用了带来了什么效果?如果效果不好怎么办?哪些界面需要使用?一个界面都有要展示的要素,当悬浮窗的使用是不是影响本界面的因素,其他的界面的 ...

  3. Android 悬浮按钮的简单实现

    Android 悬浮按钮的简单实现 package com.example.doinbackground;import android.app.Activity; import android.os. ...

  4. android 悬浮按钮下载,简悬浮安卓版(android 悬浮按钮)V1.3.5 最新版

    简悬浮安卓版(android 悬浮按钮)是专门为广大安卓用户开发的一款悬浮按钮应用.通过简悬浮APP,用户可以开启悬浮功能设置,然后就可以自定义手势栏功能,完成一键快速操作,提高使用效率.而且还能设置 ...

  5. android 悬停按钮,Android悬浮按钮的使用方法

    悬浮按钮效果如下图所示: 步骤1:引用 compile 'com.laocaixw.suspendbuttonlayout:suspendbuttonlayout:1.0.3' 步骤2:xml布局 a ...

  6. android悬浮按钮弹出与隐藏,Android悬浮窗按钮实现点击并显示/隐藏多功能列表

    前言 最近在一个项目中,需要制作录屏的功能,原先是在应用中有录屏/控制的按钮,思考之下觉得这种效果并不好,因此就想制作一个可以悬浮的悬浮窗,这样不论手机在什么界面中都可以对录屏功能进行控制. 这里就来 ...

  7. android悬浮功能实现,Android实现系统级悬浮按钮

    本文实例为大家分享了Android系统级悬浮按钮的具体代码,供大家参考,具体内容如下 具体的需求 1.就是做一个系统级的悬浮按钮,就像iPhone 桌面的那个悬浮按钮效果一样,能随意拖动,并且手一放开 ...

  8. android悬浮按钮阴影,浅谈FloatingActionButton(悬浮按钮)

    一.介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 android.support.design.widget.FloatingActionButt ...

  9. android 悬浮按钮

    这里介绍一下悬浮按钮-----FloatingtActionButton的实现,以及会出现的问题. 布局文件activity_main.xml <?xml version="1.0&q ...

最新文章

  1. Windows下配置Java开发环境
  2. Windows Server 2008 IIS7.0 发布html和Asp.net网站
  3. libevent项目分析(一) -- 准备阶段
  4. 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...
  5. 项目验收文档合并技巧
  6. 【蓝桥杯嵌入式】【STM32】11_2016_第七届_蓝桥杯_省赛_电压测量监控设备
  7. 你们身边成功的生意人有哪些特质
  8. 第七课 Linux裸机开发+SourceInsight3.5使用+notepad++使用
  9. [leedcode 229] Majority Element II
  10. 售假获刑后他又被淘宝告上法庭,杭州互联网法院当庭宣判
  11. linux控制windows关机
  12. Java编程练习题3
  13. modbus 调试工具之modbus slave与modbus poll
  14. 如何开发一套完整的医疗远程会诊系统方案
  15. LSD源代码编译运行
  16. 工作中常见的两种谬误
  17. 浅析智能访客机的应用
  18. 史上最狠的十二星座分析
  19. 通过爬虫获取第五人格游戏信息整理并分析(一)
  20. html生成真正的空图片代码 用canvas和script生成无实质性的空白图像 比图像透明处理还要牛 那种空白透明头像就是这么做出来的

热门文章

  1. 我的第一个安卓应用程序_今天,我启动了我的第一个移动应用程序。 这是我学到的...
  2. 【JAVA】关于向上转型与向下转型
  3. Pytorch入门(6)-图片风格迁移和GAN
  4. ORC 在 Hive 中的应用
  5. 如何快速查找下载java项目所需jar包
  6. Winform窗体中发送HTTP请求 手工发送HTTP请求主要是调用 System.Net的HttpWebResponse方法
  7. endnote如何添加网页类参考文献
  8. Opencv--CvMat声明和使用
  9. 变分法理解1——泛函简介
  10. Ubuntu下安装最新版QQ