[Android]RapidFloatingActionButton框架正式出炉

简介:

以下内容为原创,欢迎转载,转载请注明

来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4474748.html

RapidFloatingActionButton

Google推出了MaterialDesign的设计语言,其中FloatingActionButton就是一部分,但是Google却没有提供一个官方的FloatingActionButton控件,网上找了几个试用了下,但是始终没有找到合适的,所以,自己动手丰衣足食了。

RapidFloatingActionButton(以下简称RFAB)是Floating Action Button的快速实现。

Github地址:https://github.com/wangjiegulu/RapidFloatingActionButton


  

 

使用方式:

依赖:
AndroidBucket(https://github.com/wangjiegulu/AndroidBucket):基础工具包
AndroidInject(https://github.com/wangjiegulu/androidInject):注解框架

NineOldAndroids(https://github.com/JakeWharton/NineOldAndroids):兼容低版本的动画框架

activity_main.xml:

复制代码
 1 <com.wangjie.rapidfloatingactionbutton.RapidFloatingActionLayout
 2       xmlns:rfal="http://schemas.android.com/apk/res-auto"
 3       android:id="@+id/activity_main_rfal"
 4       android:layout_width="match_parent"
 5       android:layout_height="match_parent"
 6       rfal:rfal_frame_color="#ffffff"
 7       rfal:rfal_frame_alpha="0.7"
 8       >
 9   <com.wangjie.rapidfloatingactionbutton.RapidFloatingActionButton
10           xmlns:rfab="http://schemas.android.com/apk/res-auto"
11           android:id="@+id/activity_main_rfab"
12           android:layout_width="wrap_content"
13           android:layout_height="wrap_content"
14           android:layout_alignParentRight="true"
15           android:layout_alignParentBottom="true"
16           android:layout_marginRight="15dp"
17           android:layout_marginBottom="15dp"
18           android:padding="8dp"
19           rfab:rfab_size="normal"
20           rfab:rfab_drawable="@drawable/rfab__drawable_rfab_default"
21           rfab:rfab_color_normal="#37474f"
22           rfab:rfab_color_pressed="#263238"
23           rfab:rfab_shadow_radius="7dp"
24           rfab:rfab_shadow_color="#999999"
25           rfab:rfab_shadow_dx="0dp"
26           rfab:rfab_shadow_dy="5dp"
27           />
28 </com.wangjie.rapidfloatingactionbutton.RapidFloatingActionLayout>
复制代码

在需要增加RFAB最外层使用<com.wangjie.rapidfloatingactionbutton.RapidFloatingActionLayout>,按钮使用<com.wangjie.rapidfloatingactionbutton.RapidFloatingActionButton>

属性解释

RapidFloatingActionLayout:

  rfal_frame_color: 展开RFAB时候最外覆盖层的颜色,默认是纯白色
  rfal_frame_alpha: 展开RFAB时候最外覆盖层的透明度(0 ~ 1),默认是0.7

RapidFloatingActionButton:

复制代码
 rfab_size: RFAB的尺寸大小,只支持两种尺寸(Material Design规范):
          normal: 直径56dp
          mini: 直径40dp
  rfab_drawable: RFAB中间的图标,默认是一个"+"图标
  rfab_color_normal: RFAB背景的普通状态下的颜色。默认是白色
  rfab_color_pressed: RFAB背景的触摸按下状态的颜色。默认颜色是"#dddddd"
  rfab_shadow_radius: RFAB的阴影半径。默认是0,表示没有阴影
  rfab_shadow_color: RFAB的阴影颜色。默认是透明,另外如果rfab_shadow_radius为0,则该属性无效
  rfab_shadow_dx: RFAB的阴影X轴偏移量。默认是0
  rfab_shadow_dy: RFAB的阴影Y轴偏移量。默认是0
复制代码

MainActivity:

复制代码
 1 @AILayout(R.layout.activity_main)
 2 public class MainActivity extends AIActionBarActivity implements RapidFloatingActionContentLabelList.OnRapidFloatingActionContentListener {
 3 
 4     @AIView(R.id.activity_main_rfal)
 5     private RapidFloatingActionLayout rfaLayout;
 6     @AIView(R.id.activity_main_rfab)
 7     private RapidFloatingActionButton rfaBtn;
 8     private RapidFloatingActionButtonHelper rfabHelper;
 9 
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13 
14         RapidFloatingActionContentLabelList rfaContent = new RapidFloatingActionContentLabelList(context);
15         rfaContent.setOnRapidFloatingActionContentListener(this);
16         List<RFACLabelItem> items = new ArrayList<>();
17         items.add(new RFACLabelItem<Integer>()
18                         .setLabel("Github: wangjiegulu")
19                         .setResId(R.drawable.ic_launcher)
20                         .setIconNormalColor(0xffd84315)
21                         .setIconPressedColor(0xffbf360c)
22                         .setWrapper(0)
23         );
24         items.add(new RFACLabelItem<Integer>()
25                         .setLabel("tiantian.china.2@gmail.com")
26                         .setResId(R.drawable.ic_launcher)
27                         .setIconNormalColor(0xff4e342e)
28                         .setIconPressedColor(0xff3e2723)
29                         .setWrapper(1)
30         );
31         items.add(new RFACLabelItem<Integer>()
32                         .setLabel("WangJie")
33                         .setResId(R.drawable.ic_launcher)
34                         .setIconNormalColor(0xff056f00)
35                         .setIconPressedColor(0xff0d5302)
36                         .setWrapper(2)
37         );
38         items.add(new RFACLabelItem<Integer>()
39                         .setLabel("Compose")
40                         .setResId(R.drawable.ic_launcher)
41                         .setIconNormalColor(0xff283593)
42                         .setIconPressedColor(0xff1a237e)
43                         .setWrapper(3)
44         );
45         rfaContent
46                 .setItems(items)
47                 .setIconShadowRadius(ABTextUtil.dip2px(context, 5))
48                 .setIconShadowColor(0xff999999)
49                 .setIconShadowDy(ABTextUtil.dip2px(context, 5))
50         ;
51 
52         rfabHelper = new RapidFloatingActionButtonHelper(
53                 context,
54                 rfaLayout,
55                 rfaBtn,
56                 rfaContent
57         ).build();
58 
59     }
60 
61     @Override
62     public void onRFACItemLabelClick(int position, RFACLabelItem item) {
63         Toast.makeText(getContext(), "clicked label: " + position, Toast.LENGTH_SHORT).show();
64         rfabHelper.toggleContent();
65     }
66 
67     @Override
68     public void onRFACItemIconClick(int position, RFACLabelItem item) {
69         Toast.makeText(getContext(), "clicked icon: " + position, Toast.LENGTH_SHORT).show();
70         rfabHelper.toggleContent();
71     }
72 }
复制代码

除了xml中设置的RapidFloatingActionLayoutRapidFloatingActionButton之外,还需要RapidFloatingActionContent的实现类来填充和指定RFAB的内容和形式。
这里提供了一个快速的RapidFloatingActionContent的实现解决方案:RapidFloatingActionContentLabelList。你可以加入多个item(RFACLabelItem,当然,不建议加太多的item,导致超过一个屏幕),然后设置每个item的颜色、图标、阴影、label的背景图片、字体大小颜色甚至动画。
它的效果可参考最上面的效果图片或者Google的Inbox的效果。
除此之外,你还需要使用RapidFloatingActionButtonHelper来把以上所有零散的组件组合起来。

关于扩展:

如果你不喜欢默认提供的RapidFloatingActionContentLabelList,理论上你可以扩展自己的内容样式。方法是继承com.wangjie.rapidfloatingactionbutton.RapidFloatingActionContent,然后初始化内容布局和样式,并调用父类的setRootView(xxx);方法即可。如果你需要增加动画,可以重写如下方法:

public void onExpandAnimator(AnimatorSet animatorSet);
public void onCollapseAnimator(AnimatorSet animatorSet);

把需要的Animator增加到animatorSet中即可
另外,作者也会不定期增加更多的RapidFloatingActionContent的扩展

License

复制代码
Copyright 2015 Wang Jie

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
复制代码

 

本文转自天天_byconan博客园博客,原文链接:http://www.cnblogs.com/tiantianbyconan/p/4474748.html ,如需转载请自行联系原作者
相关文章
|
4月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
5月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台框架解析
在移动应用开发的广阔舞台上,安卓和iOS一直是两大主角。随着技术的进步,开发者们渴望能有一种方式,让他们的应用能同时在这两大平台上运行,而不必为每一个平台单独编写代码。这就是跨平台框架诞生的背景。本文将探讨几种流行的跨平台框架,包括它们的优势、局限性,以及如何根据项目需求选择合适的框架。我们将从技术的深度和广度两个维度,对这些框架进行比较分析,旨在为开发者提供一个清晰的指南,帮助他们在安卓和iOS的开发旅程中,做出明智的选择。
|
1月前
|
算法 JavaScript Android开发
|
23天前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
126 1
|
3月前
|
前端开发 Java 数据库
💡Android开发者必看!掌握这5大框架,轻松打造爆款应用不是梦!🏆
在Android开发领域,框架犹如指路明灯,助力开发者加速应用开发并提升品质。本文将介绍五大必备框架:Retrofit简化网络请求,Room优化数据库访问,MVVM架构提高代码可维护性,Dagger 2管理依赖注入,Jetpack Compose革新UI开发。掌握这些框架,助你在竞争激烈的市场中脱颖而出,打造爆款应用。
414 3
|
3月前
|
编译器 Android开发 开发者
带你了解Android Jetpack库中的依赖注入框架:Hilt
本文介绍了Hilt,这是Google为Android开发的依赖注入框架,基于Dagger构建,旨在简化依赖注入过程。Hilt通过自动化的组件和注解减少了DI的样板代码,提高了应用的可测试性和可维护性。文章详细讲解了Hilt的主要概念、基本用法及原理,帮助开发者更好地理解和应用Hilt。
91 8
|
4月前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!
|
4月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
如何使用Amlogic T972安卓9.0系统上的misc框架来简化驱动程序开发,通过misc框架自动分配设备号并创建设备文件,从而减少代码量并避免设备号冲突。
57 0
基于Amlogic 安卓9.0, 驱动简说(三):使用misc框架,让驱动更简单
|
4月前
|
存储 前端开发 Java
Android MVVM框架详解与应用
在Android开发中,随着应用复杂度的增加,如何有效地组织和管理代码成为了一个重要的问题。MVVM(Model-View-ViewModel)架构模式因其清晰的结构和高效的开发效率,逐渐成为Android开发者们青睐的架构模式之一。本文将详细介绍Android MVVM框架的基本概念、优势、实现流程以及一个实际案例。
142 0