2017 春季最酷的 30 个 Android 库

kxun 7年前
   <p>这里是 30 个我最喜欢的在 2017 年 3 月前新出现的 Android 库。其中一些并没有用于实际产品,但你使用它们可能会得到很多的乐趣。我希望你们喜欢这些库。</p>    <p>下面的顺序不代表排名:</p>    <p><strong>1. <a href="/misc/goto?guid=4959749409617019607" rel="nofollow,noindex">Matisse</a> </strong></p>    <p>这是一个漂亮的本地图片、视频选择器。其主要功能有:</p>    <ul>     <li>选择包括JPEG、PNG、GIF格式的图片和 MPEG、MP4 格式的视频</li>     <li>支持自定义主题,包括两个内置的主题</li>     <li>不同的图片加载器</li>     <li>定义自定义过滤规则</li>     <li>在 Activities 和 Fragments 中操作良好</li>    </ul>    <p>你可以在代码库的 <a href="/misc/goto?guid=4959749409707261556" rel="nofollow,noindex">wiki</a> 中发现更多。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/90c38d0f25b835c8ff9ea3f722ab9940.png"></p>    <p><strong>2. <a href="/misc/goto?guid=4959747002179983472" rel="nofollow,noindex">Spruce Android Animation Library</a> (安卓动画库) </strong></p>    <p>Spruce 是一个轻量级的动画库,可以帮助排版屏幕上的动画。使用有很多不同的动画库时,开发人员需要确保每个视图都能够在适当的时间活动。 Spruce 可以帮助设计师获得复杂的多视图动画,而不是让开发人员在原型阶段就感到畏惧。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/edbfa326bcc237e87cb2976a7aac0eec.gif"></p>    <p><strong>3. <a href="/misc/goto?guid=4959747422753293316" rel="nofollow,noindex">MaterialChipsInput</a> </strong></p>    <p>Chips 是 Material Design 中组件,他们被描述为</p>    <p>引用</p>    <p>小却相对复杂的个体,比如联系人。Chip 可以包含一些独立的东西,比如照片、文本、条款、图标或者联系人。</p>    <p>MaterialChipsInput 是在 Android 中实现的那个组件。这个库提供了两个视图: <a href="/misc/goto?guid=4959749409849638945" rel="nofollow,noindex">ChipsInput</a> 和 <a href="/misc/goto?guid=4959749409935446364" rel="nofollow,noindex">ChipView</a> .</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/53117ba9952cb495108eb8e1274cedb7.gif"></p>    <p><strong>4. <a href="/misc/goto?guid=4959747002433269448" rel="nofollow,noindex">Grav</a> </strong></p>    <p>该库允许基于点创建多个动画。 你可以很容易地制作出光滑美丽的动画。 README 包含很多示例,因此您可以在此处查看。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/6e76b2c305f86e087d4d49d0e7d2614b.gif"></p>    <p><strong>5. <a href="/misc/goto?guid=4959749410053614691" rel="nofollow,noindex">Litho</a> </strong></p>    <p>Litho 不是库,而是一个框架。它是一个非常强大的框架,以声明的方式构建 UI。它由 非死book 的开发者开发,所以就算你不想使用它,它仍然值得你去关注它的开发过程。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/da805a3f238bd64df644e130559b7d1a.png"></p>    <p>主要特性包括:</p>    <ul>     <li>使用申明式 API  来定义 UI 组件。你只需要基于一套固定的输入来描述布局就好,其它事情框架会搞定。</li>     <li>异步布局:Litho 可以在不阻碍 UI 线程的情况下计算并对 UI 布局。</li>     <li>扁平化视图:Litho 使用 Yoga 来布局,并自动缩减 UI中 ViewGroups 的数量。</li>     <li>细粒度回收:UI 中任何像 text 或 image 之类的组件都能被回收再利用。</li>    </ul>    <p><strong>6. <a href="/misc/goto?guid=4959748624376675649" rel="nofollow,noindex">Adaptable Bottom Navigation</a> (自适应的底部导航) </strong></p>    <p>不久前 Google 更新了 Material Design 的计划,介绍了底部导航栏,这是个在应用中让 UI 跟随内容变化的不错的方式。设计支持库(Design Support Library) 中也添加了实现。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/fa516980067dd7f24f4206c5a32154ff.png"></p>    <p>用自适应底层导航替换支持库中的 BottomNavigationView 非常简单。它以 ViewPager 和 TabLayout 的工作方式来实现。这里有来自开发团队的一个简短说明:</p>    <p>引用</p>    <p>如前所述,使用 Android 支持库中的底部导航视图需要写很多无聊的的代码切换视图。因此,我们根据 TabLayout 的 setupWithViewPater() 方法,创建了独有特色的 ViewSwapper 组件连接到底层导航视图来以一个简单的方式对视图的显示进行管理。</p>    <p>你可以在 Github 中找到更多相关信息。对于为什么要实现这个东西,那里有详尽的资料和说明(提示:结构清晰)。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/af26782f7d87e6d3365365dfccb68ffd.gif"></p>    <p><strong>7. <a href="/misc/goto?guid=4959747002344349069" rel="nofollow,noindex">PatternLockView</a> (图形锁视图) </strong></p>    <p>引用</p>    <p>这个库让你可以在应用中简单快速的实现图形锁机制。这个视图真的是非常易用,它有大量的个性化选项可以用于改变功能和外观,以此满足你的需求。</p>    <p>引用</p>    <p>它还支持 RxJava 2 视图绑定,所以如果你喜欢响应式编程(就像我一样),你可以得到用户绘制图形的更新流。</p>    <p>README 中充满了示例,所以入门很容易。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/d52e7530114ec63e2ce88d5a1073a8b2.gif"></p>    <p><strong>8. <a href="/misc/goto?guid=4959747002519701553" rel="nofollow,noindex">Isometric</a> </strong></p>    <p>这是一个有助于绘制等轴形状的库。在我看来,它是本列表中最炫的库之一,因为它让我想起了 Monument Valley 游戏。</p>    <p>该库支持绘制多个形状、路径和复杂结构,如下面的示例:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/148292bf666f7bceb8abe7a045860172.png"></p>    <p><strong>9. <a href="/misc/goto?guid=4959009806342377686" rel="nofollow,noindex">UltraViewPager</a> </strong></p>    <p>UltraViewPager 是一个封装多种特性的 ViewPager ,主要是为多页面切换场景提供统一解决方案。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/f2ef83ee1587153e4ced2fb2c93db885.gif"></p>    <p><strong>主要功能</strong></p>    <ul>     <li>支持横向滑动/纵向滑动</li>     <li>支持一屏内显示多页</li>     <li>支持循环滚动</li>     <li>支持定时滚动,计时器使用 Handler 实现</li>     <li>支持设置 ViewPager 的最大宽高</li>     <li>setRatio 按比例显示 UltraviewPager</li>     <li>内置 indicator ,只需简单设置几个属性就可以完成展示,支持圆点和 Icon;</li>     <li>内置两种页面切换动效</li>    </ul>    <p>该库有一个非常良好的文档。</p>    <p><strong>10. <a href="/misc/goto?guid=4959749410265325408" rel="nofollow,noindex">InfiniteCards</a> </strong></p>    <p>可自定义动效的卡片切换视图,该库有助于实现卡片 UI ,然后用一个漂亮的动画切换它们。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/3a06781a8ad21f9ac0fb43f6c1963a61.gif"></p>    <p><strong>参数</strong></p>    <p>front : 将点击的卡片切换到第一个</p>    <p>switchPosition : 将点击的卡片和第一张卡片互换位置</p>    <ul>     <li>animType : 动效展示类型</li>     <li>frontToLast : 将第一张卡片移到最后,后面的卡片往前移动一个</li>     <li>cardRatio : 卡片宽高比</li>     <li>animDuration : 卡片动效时间</li>     <li>animAddRemoveDelay : 卡片组切换时,添加与移出时,相邻卡片展示动效的间隔时间</li>     <li>animAddRemoveDuration : 卡片组切换时,添加与移出时,卡片动效时间</li>    </ul>    <p><strong>11. <a href="/misc/goto?guid=4959746839603810326" rel="nofollow,noindex">SlidingRootNav</a> </strong></p>    <p>我们可以认为这个库是像 DrawerLayout 的 ViewGroup,drawer(抽屉) 隐藏在内容视图之下,可以通过改变它们来显示 drawer。REAMDE 很全面,值得一看。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/59ee19822f1dfc4324b72dff52afaeb0.gif"></p>    <p><strong>12. <a href="/misc/goto?guid=4959749410370887032" rel="nofollow,noindex">PasscodeView</a> </strong></p>    <p>这就是一个你可以键入密码的 view。但非常棒!</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/83156c0a869c6fd4842a33f3135c970a.gif"></p>    <p><strong>13. <a href="/misc/goto?guid=4959748789139966599" rel="nofollow,noindex">MusicWave</a> </strong></p>    <p>该库允许将声音表示为彩色梯度变化。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/cae7297fddb6178370aabfd35d1e8ccf.gif"></p>    <p><strong>14. <a href="/misc/goto?guid=4959746839672063927" rel="nofollow,noindex">ShadowImageView</a> </strong></p>    <p>该库可帮助你为图片添加更有意义的阴影。根据 README ,它的作用是:</p>    <p>引用</p>    <p>可以根据图片内容变阴影颜色,更加细腻的阴影效果。</p>    <p>此外,它也非常易于使用。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/cd8e8f3d5bfea7088f5d2e085a142269.png"></p>    <p><strong>15. <a href="/misc/goto?guid=4959749410520269924" rel="nofollow,noindex">PolygonDrawingUtil</a> </strong></p>    <p>这是一个高效的 Android 实用程序类,用于在 <a href="/misc/goto?guid=4959749410613072305" rel="nofollow,noindex">Canvas</a> 上绘制常规的多边形。 我们可以指定:</p>    <ul>     <li>边数(≥3)</li>     <li>中心点坐标</li>     <li>外接圆半径(从中心到顶点的距离)</li>     <li>圆角半径</li>     <li>多边形旋转度</li>     <li>填充/描边 <a href="/misc/goto?guid=4959749410703091538" rel="nofollow,noindex">颜色</a></li>    </ul>    <p style="text-align:center"><img src="https://simg.open-open.com/show/57e7a5e6ea11f089d28056b84fbeb32e.gif"></p>    <p><strong>16. <a href="/misc/goto?guid=4959748250959308278" rel="nofollow,noindex">Tiny</a> </strong></p>    <p>这是本列表中的第二个框架。它负责图像压缩,功能相当强大的。还支持</p>    <p>引用</p>    <p>使用异步线程池来压缩图像,并且当压缩完成时,会将结果发送到主线程中。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/6adc5a38fe1599a399bbc9f792080ce2.png"></p>    <p><strong>17. <a href="/misc/goto?guid=4959748407739794497" rel="nofollow,noindex">ParticleTextView</a> </strong></p>    <p>该库提供了一个自定义的 view 组件,可以用彩色粒子组成指定的文字,并配合多种动画效果和配置属性,呈现出丰富的视觉效果。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/7e68699b07a0279c41c85a79eca2967e.gif"></p>    <p><strong>18. <a href="/misc/goto?guid=4959747002066692700" rel="nofollow,noindex">CropIwa</a> </strong></p>    <p>这是一个高可配置的图像裁剪部件。该库基于模块化结构,因此它的可配置性非常强。你可以从 Github 上的 WiKi 了解如何进行配置。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/8f714269338a02bdeb1e752cfcea612e.gif"></p>    <p><strong>19. <a href="/misc/goto?guid=4959746839833350042" rel="nofollow,noindex">Project Condom</a> </strong></p>    <p>『保险套』是一个超轻超薄的 Android 工具库,将它套在 Android 应用工程里裸露的 Context 上,再传入第三方 SDK(通常是其初始化方法),即可防止三方 SDK 中常见的损害用户体验的行为:</p>    <p>引用</p>    <p>在后台启动大量其它应用的进程(在三方推送 SDK 中较为常见),导致应用启动非常缓慢,启动后一段时间内出现严重的卡顿(在中低端机型上尤其明显)。 这是由于在这些 SDK 初始化阶段启动的其它应用中往往也存在三方 SDK 的类似行为,造成了进程启动的『链式反应』,在短时间内消耗大量的 CPU、文件 IO 及内存资源,使得当前应用所能得到的资源被大量挤占(甚至耗尽)。</p>    <p><strong>20. <a href="/misc/goto?guid=4959749410897820968" rel="nofollow,noindex">AppMethodOrder</a> </strong></p>    <p>一个能让你了解所有函数调用顺序以及函数耗时的 Android 库(无需侵入式代码)。</p>    <p>引用</p>    <p>当项目代码量很大的时候,或者你作为一名新人要快速掌握代码的时候,给函数打上 log ,来了解代码执行逻辑,这种方式会显然成本太大,要改动项目编译运行,NO!太耗时;或者你想 debug 的方式来给你想关注的几个函数,来了解代码执行逻辑,NO!因为你肯定会漏掉函数;也许你可以固执的给你写的项目打满 log 说这样也行,但是你要知道你方法所调用的 jdk 的函数或者第三方 aar 或者 jar 再或者 android sdk 中的函数调用顺序你怎么办,还能打 log 吗?显然不行吧,来~这个项目给让可以让你以包名为过滤点过滤你想要知道所有函数调用顺序。</p>    <p>项目有详细的文件,你可以找到详细的手册了解如何使用它。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/959ae837b77ec5b809205c776a3af0ed.png"></p>    <p><strong>21. <a href="/misc/goto?guid=4959749410995742921" rel="nofollow,noindex">Android DebugKit</a> </strong></p>    <p>这是一个有趣的库。它允许你创建和使用特殊的悬停调试工具,以触发你在应用程序中定义的操作。这些操作可以在运行时明显的触发,因此可以在编写或测试手机屏幕反馈时间时使用。</p>    <p>该库使用 Builder 模式。 它很容易使用,在 README 中有一个其用法的示例。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/8dc89186a6ff602a5525b0ec9fa34243.gif"></p>    <p><strong>22. <a href="/misc/goto?guid=4959748788628534367" rel="nofollow,noindex">Aesthetic</a> </strong></p>    <p>这是一个新的库,仍处于测试版,但它做了一件非常酷的事情 - 它通过 Rx 支持动态改变系统主题! 作者是这么描述的:</p>    <p>引用</p>    <p>一个快速和易于使用的即插即用的动态主题引擎。由 Rx 支持,适用于 Android 应用。</p>    <p>该库文档非常不错、内容全面,值得一读。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/dbb666a42e45ad310031130d2ec7c812.png"></p>    <p><strong>23. <a href="/misc/goto?guid=4959748402907118559" rel="nofollow,noindex">EasyCalendar</a> </strong></p>    <p>这是一个简单的自定义日历小插件。 主要功能包括:</p>    <ul>     <li>自定义布局的标题</li>     <li>自定义布局的日期</li>     <li>显示或隐藏日期的分隔符</li>     <li>显示或隐藏溢出的日期</li>     <li>监听日期视图的点击操作</li>    </ul>    <p>该库的文档是全面且易于使用的。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/9825cc7f53cd9de909fe1d7031432eff.gif"></p>    <p><strong>24. <a href="/misc/goto?guid=4959748788820006368" rel="nofollow,noindex">SimpleRatingBar</a> </strong></p>    <p>该库提供两个评分栏:</p>    <ul>     <li>BaseRatingBar - 没有任何动画</li>     <li>ScaleRatingBar - 具有渐进和缩放动画</li>    </ul>    <p>你可以在下面的 gif 图中看到它们的效果:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/38055dba4c83b6d7ee322b009efe2912.gif"></p>    <p><strong>25. <a href="/misc/goto?guid=4959749411168505034" rel="nofollow,noindex">Magellan</a> </strong></p>    <p>这个库被标榜为最简单的 Android 导航库,但你仍然需要自己判断它是否适合自己使用。主要特性:</p>    <ul>     <li>调用 goTo(screen) 方法就能简单实现导航,</li>     <li>返回栈完全可控,</li>     <li>自动处理过渡。</li>    </ul>    <p><a href="/misc/goto?guid=4959749411254075042" rel="nofollow,noindex">wiki</a> 上有全面的说明。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/5f53063f3a6a15bd3498481687bdd84e.png"></p>    <p><strong>26. <a href="/misc/goto?guid=4959748624176112307" rel="nofollow,noindex">ViewPagerAnimator</a> </strong></p>    <p>引用</p>    <p>ViewPagerAnimator 是一款面向 Android 的轻量级、功能强大的 ViewPager 动画库。 它被设计为在用户在 ViewPager 中的页面之间导航时显示任意动画,并且将精确地跟随他或她的手指的动作。虽然该库本身可能对某些人有用,但是发布这个库的主要目的就是展示一些完美 API 的细节之处,在使用即将到来的 Java 8 扩展时,这真的是走在前列的。本库还提供了 Java 7 和 Java 8 的示例项目。</p>    <p>它是由 <a href="/misc/goto?guid=4959749411360604584" rel="nofollow,noindex">Mark Allison</a> 写的,你可以在他的 <a href="/misc/goto?guid=4959748623475959195" rel="nofollow,noindex">Styling Android</a> 博客上获得更多的信息。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/581e49669289ad8e505fcd18c591033f.gif"></p>    <p><strong>27. <a href="/misc/goto?guid=4959748788256750655" rel="nofollow,noindex">BlockCanaryEx</a> </strong></p>    <p>这是一个当你的应用程序被阻塞时,它可以方便在代码中找到阻塞的方法的库。它是基于 <a href="/misc/goto?guid=4959718466889846954" rel="nofollow,noindex">BlockCanary</a> 的。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/57ebb91a6a69f1bd2a53fc4a2f96831e.png"></p>    <p><strong>28. <a href="/misc/goto?guid=4959749411533796956" rel="nofollow,noindex">PaletteImageView</a> </strong></p>    <p>非常酷的一个库,可以动态的提取图片的主要颜色,并将颜色作为图片阴影的控件。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/92723b6198d34e01a812471b42fc0261.gif"></p>    <p>该项目文档较少,但我认为代码是不言自明的。</p>    <p><strong>29. <a href="/misc/goto?guid=4959749411626809092" rel="nofollow,noindex">RecyclerRefreshLayout</a> </strong></p>    <p>这是一个打开相机快门的刷新动画。在我看来,真的值得研究,特别是在 README 中有一个关于如何实现这个效果的数学分析!</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/a1dbcd5756fbaf2f4e140b12c3809fcd.gif"></p>    <p><strong>30. <a href="/misc/goto?guid=4959749411708013501" rel="nofollow,noindex">SlimAdapter</a> </strong></p>    <p>这是一种不使用 ViewHolder 来编写适配器的方法。主要功能包括:</p>    <ul>     <li>不包含 ViewHolders</li>     <li>没有反射</li>     <li>流畅和简单的 API</li>     <li>支持多类型适配器</li>     <li>支持 Kotlin</li>     <li>支持简单的 DiffUtil</li>    </ul>    <p style="text-align:center"><img src="https://simg.open-open.com/show/a6d91558e086463d3005a3b490da6711.png"></p>    <p>以上。希望你喜欢这篇文章! 如果还有在这个春天发布的其他伟大的库我没有提到,请在下面回复让我知道。 让我们一起维护这个列表!</p>    <p>英文原文: <a href="/misc/goto?guid=4959749411787127284" rel="nofollow,noindex">The 30 Coolest Android Libraries from Spring 2017</a></p>    <p>译者:Tocy, 边城, 王练, 总长, tsingkuo</p>    <p> </p>    <p>来自:http://www.iteye.com/news/32448</p>    <p> </p>