android 悬浮按钮 魅族,Android使用RecycleView实现魅族手机通讯录界面
原标题: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实现魅族手机通讯录界面相关推荐
- android悬浮 按钮列表,Android悬浮菜单按钮FloatingActionButton实现
[实例简介] Android悬浮菜单按钮FloatingActionButton实现,可直接拿到项目中集成使用.希望大家多多关注我的博客:https://blog.csdn.net/k57103983 ...
- android 悬浮按钮和可交互提示,悬浮按钮的使用原则
当要用悬浮的时候,考虑下在哪使用?什么条件下使用?不使用行不行?使用了带来了什么效果?如果效果不好怎么办?哪些界面需要使用?一个界面都有要展示的要素,当悬浮窗的使用是不是影响本界面的因素,其他的界面的 ...
- Android 悬浮按钮的简单实现
Android 悬浮按钮的简单实现 package com.example.doinbackground;import android.app.Activity; import android.os. ...
- android 悬浮按钮下载,简悬浮安卓版(android 悬浮按钮)V1.3.5 最新版
简悬浮安卓版(android 悬浮按钮)是专门为广大安卓用户开发的一款悬浮按钮应用.通过简悬浮APP,用户可以开启悬浮功能设置,然后就可以自定义手势栏功能,完成一键快速操作,提高使用效率.而且还能设置 ...
- android 悬停按钮,Android悬浮按钮的使用方法
悬浮按钮效果如下图所示: 步骤1:引用 compile 'com.laocaixw.suspendbuttonlayout:suspendbuttonlayout:1.0.3' 步骤2:xml布局 a ...
- android悬浮按钮弹出与隐藏,Android悬浮窗按钮实现点击并显示/隐藏多功能列表
前言 最近在一个项目中,需要制作录屏的功能,原先是在应用中有录屏/控制的按钮,思考之下觉得这种效果并不好,因此就想制作一个可以悬浮的悬浮窗,这样不论手机在什么界面中都可以对录屏功能进行控制. 这里就来 ...
- android悬浮功能实现,Android实现系统级悬浮按钮
本文实例为大家分享了Android系统级悬浮按钮的具体代码,供大家参考,具体内容如下 具体的需求 1.就是做一个系统级的悬浮按钮,就像iPhone 桌面的那个悬浮按钮效果一样,能随意拖动,并且手一放开 ...
- android悬浮按钮阴影,浅谈FloatingActionButton(悬浮按钮)
一.介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 android.support.design.widget.FloatingActionButt ...
- android 悬浮按钮
这里介绍一下悬浮按钮-----FloatingtActionButton的实现,以及会出现的问题. 布局文件activity_main.xml <?xml version="1.0&q ...
最新文章
- Windows下配置Java开发环境
- Windows Server 2008 IIS7.0 发布html和Asp.net网站
- libevent项目分析(一) -- 准备阶段
- 10分钟用python编写贪吃蛇小游戏_牛得一批!10分钟用Python编写一个贪吃蛇小游戏...
- 项目验收文档合并技巧
- 【蓝桥杯嵌入式】【STM32】11_2016_第七届_蓝桥杯_省赛_电压测量监控设备
- 你们身边成功的生意人有哪些特质
- 第七课 Linux裸机开发+SourceInsight3.5使用+notepad++使用
- [leedcode 229] Majority Element II
- 售假获刑后他又被淘宝告上法庭,杭州互联网法院当庭宣判
- linux控制windows关机
- Java编程练习题3
- modbus 调试工具之modbus slave与modbus poll
- 如何开发一套完整的医疗远程会诊系统方案
- LSD源代码编译运行
- 工作中常见的两种谬误
- 浅析智能访客机的应用
- 史上最狠的十二星座分析
- 通过爬虫获取第五人格游戏信息整理并分析(一)
- html生成真正的空图片代码 用canvas和script生成无实质性的空白图像 比图像透明处理还要牛 那种空白透明头像就是这么做出来的