本文实例为大家分享了自定义支持所有View , 供大家参考 , 具体内容如下
一、实现效果图
这个右下角的FAB , 动画当然可以多种多样 , 可以放在界面的任何地方 , 我们这里只举个例子 。但是v7包中提供的目前只能是来用 , 所以今天我们实现的这个是支持所有的View的 , 可以用在、、 , 只要是继承View的类都可以用 。
二、自定义和动画的封装
我们知道是的一个子类 , Ctrl + T查看它的实现类目前有如下几个:
1. .;
2. .r;
3. .;
4. .;
5. ;
6. ;
7. ;
8. ;
9. ;
其中第1、7是抽象类 , 8是保护的类 , 9是8的一个子类 , 我们回头再说 。
.r我们经常用 , 也就是我们在 xml中经常用的:app:="@/" 。
.被用于 , 这个不用多说 。
.、、在文章开头的几个友情链接的博客中已经讲的很清楚了 , 大家可以回过头去再看看 。
今天讲的是自定义支持所有View作为FAB , 那么也就是.了 , 但是它只支持 , 所以今天我们要自己继承来写 。所以第一步就是打开.的源码看 。
实现
首先必须要知道的是.这个基类是支持泛型的 , 看到.后发先它是限制了引用它的View必须是罢了 , 那我们这里也来学它继承一下就OK了 。
我们新建一个类 , 把.的代码拷贝过来 , 把里面的泛型改为如下:
class.;
也就是说只要引用实现的类是个View就可以 , 所以接着把里面拷贝的代码中把引用泛型为的地方改为View , 嗯觉得打工告成的时候发现有几个类的包导不进来:
仔细一看 , 这几个类在...包下 , 一想肯定这几个类是保护的类 , 所以我们在我们的项目下新建一个...包 , 把实现移到新建的包下 , 发现问题迎刃而解 。
项目源码和的完整源代码下载链接请在文章开头或者末尾找 。
动画的实现和简化
(没看之前博客的客观一定要回过头看看 , 一定会有不一样的收获 。)
我们在之前的同系列博客中 , 实现View的缩放动画的时候 , 尤其是在View被隐藏时须用如下代码记录View移出动画是否执行完 , 因为在界面滑动的时候View移除会被一直调用 , 所以不能重复执行 , 需要用一个值来记录:
// 记录View移出动画是否执行完 。
= false;
= new () {
@
void (View view) {
= true;
@
void (View view) {
view.(View.GONE);
= false;
@
void (View view) {
= false;
};
为了不在每一个调用的地方都写这么长一段 , 我们把这端代码封装成一个类 , 简化如下:
class uild {
// 记录View移出动画是否执行完 。
= false;
;
uild() {
= new () {
@
void (View view) {
= true;
@
void (View view) {
view.(View.GONE);
= false;
@
void (View view) {
= false;
};
// View移出动画是否执行完 。
() {
!;
// 返回 。
build() {
;
这样一来我们在用的时候就只是两行代码了:
uild uild = new uild();
// 判断是否执行完动画:
uild.();
继承实现
前面定义好了 , 这里只需要继承实现我们的动画逻辑:
class{
uild uild;
( ,attrs) {
super(, attrs);
uild = new uild();
- 2behavior原理解析
- 自觉php第一步做什么,PHP面向对象到底是啥?十分钟通俗易懂图文教程
- 把百度网站设为首页_网站关键词优化到百度首页的核心教程
- 网站优化基础教程:怎么做好关键词优化?
- Android面试:字节跳动Andorid岗25k+的面试题,面试心得体会
- 二 Android集成百度地图SDK笔记
- 2023年最新的Python操控微信教程
- python简单绘图教程视频_python 简单的绘图工具turtle使用详解
- Docker教程2 - 容器的使用和Docker的登录
- php悬浮按钮,react native悬浮按钮组件图文教程