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("[email protected]")
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.

时间: 2024-10-14 06:12:33

RapidFloatingActionButton框架正式出炉的相关文章

[Android]RapidFloatingActionButton框架正式出炉

http://home.juedui100.com/user/24038057.htmlhttp://home.juedui100.com/user/23932504.htmlhttp://home.juedui100.com/user/24001062.htmlhttp://home.juedui100.com/user/23792756.htmlhttp://home.juedui100.com/user/24037543.htmlhttp://home.juedui100.com/user

2015 PHP框架调查结果出炉,Laravel最受欢迎!

日前,SitePoint花了一个月时间进行了有关PHP框架使用情况的调查,通过调查结果所示,无论是在团队项目还是个人项目:无论是国家或是年龄层次,Laravel都是使用最多的一款框架. 其中,最流行的PHP框架前三甲为:Laravel.Symfony2.Nette.一起来看下: 最受欢迎奖 PHP框架在工作中的流行情况 日常工作中较为活跃的几款PHP框架 PHP在私人项目中的使用情况 在私人项目中较为活跃的PHP框架 如图所示,无论是在团队项目还是个人项目中,Laravel都是冠军:虽然有部分人

2017四月TOP100电商类App排行榜出炉

2017年4月最新的电商app榜单正式出炉,基于易观千帆4月移动应用大数据,我们将从电商领域里筛选出综合电商.特卖电商.跨境电商.生鲜电商.母婴电商.医药电商以及新兴的汽车交易等7大领域的运营数据独家发布,同样希望您通过这样的榜单,协助您在战略调整.产业机会方面提供决策依据. 经过一季度各种节日经济的消费拉动,4月消费者的购物热情回归到常态水平,电商平台坚持一贯的品质.品牌.品类推进战略,伴随家装季.运动季的到来,借助各种促销手段振奋线上零售市场活跃度.京东通过成立物流子集团.百万便利店计划.企

华为机试正式版(西安c/c++/java),今天下午去机试的题目,新鲜出炉了!

以下题目都是回忆的,题目都很简单, 大家有些基础就可以参加!(语言可以是c/c++,也可以是java的) 题目一(60分): 字符串操作, 将小写转换成大写, 将大写转化为小写, 数字的不做转换 例如, 输入:aBcD12 输出:AbCd12 题目二(100分): 将输入的字符串按照规定重新排序,如果字符串长度为奇数, 则中间的字符保持不变, 中间字符左侧降序排列, 右侧字符按照升序排列, 如果字符串长度为偶数,则左半侧字符降序排列,右半侧字符则按照升序排列 例如, 输入:ab5de 输出:ba

感恩回馈,新鲜出炉的《ASP.NET MVC 5框架揭秘》免费赠送

上次针对<ASP.NET Web API 2框架揭秘>举办了一次评论赠书活动,很多人问我相同的活动要不要针对<ASP.NET MVC 5框架揭秘>(阅读样章)再来一次,为此我向出版社要了10本,其中5本以评论博客的形式送出,另5本则以转发微博的形式送出,详细规则如下. 活动1 8月18.19.20.21.22(周一到周五)总计5天,在本帖,每天14点的第一个回帖评论者,分别赠送<ASP.NET MVC 5框架揭秘>1本.同一ID不可以重复参与活动,重复的话,取紧接着的下

优蜜(有米科技)面筋,香喷喷的,新鲜出炉

 优蜜(有米科技)面筋,香喷喷的,新鲜出炉 整个过程接近30分钟,感觉好快. 感觉面试官GG挺好人的,挺好说话的:是一对一面的.刚进去,他那里已有打印的简历(之前网申的简历,不是彩印的),我说自己带简历,是彩印的比较好点. 一开始,还是自我介绍:我没有全部发挥,只是简简单单介绍了下,1分钟多一点(平时都是两三分钟吧).接着,他看下简历,让我介绍一个我认为学得到比较多东西的项目(一般搞技术的不外乎都要将项目的,当然,也有例外).我挑简历中的第一个项目来说.讲完之后,面试官开始提问. 关于数据库缓存

2016亚洲城市GDP50强出炉

2017年年1月,中国各省GDP排名,台湾排第6:广东,江苏,山东,浙江,河南,台湾,四川,湖北,河北,湖南,我国台湾地区去年的GDP增长率为1.4%,总量折合人民币约为37329.1亿元,加入全国榜单排名第六,在河南省和四川省之间.2015年,河南省GDP首次超过台湾. 比较城市经济形态中的制高点--金融业,以及领军型企业的数量,广州与香港也有不小的差距: 首次!2016亚洲城市GDP50强出炉 2017-07-15 00:30GDP/榜单 全球的城市战争正在打响.城市不仅意味着更多的资源集聚

DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了

[概述] 自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定.这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和高效.今天特意写篇blog来记录我的心得与大家分享. [功能实现说明] 沿用上次的草图 目前DEMO图上的功能都已经实现.下面谈谈各部分的实现. 通信服务, 由DIOCP实现,担当与客户端的通信工作

微信小程序开发视频教程新鲜出炉

微信小程序开发公测了,可是对于新手来说,不同的框架不同的开发机制,如何快速适应呢?微信小程序开发视频教程新鲜出炉了,从零开始一步一步搭建微信小程序,每个章节都会涉及到不同的知识点,等教程学习完你不但掌握了小程序开发全部知识,同时还拥有一个完整作品的开发经验! 有需要的朋友关注一下ytkah的微信,留言索取微信小程序开发视频教程!