当前位置:   article > 正文

15个Android开源库_android开源工具库

android开源工具库

稳住,今天是周末。为大家精选了15个有趣又有用的开源,排名不分先后,一起来看看吧!

 

1

Coil

Coil是Android上的一个全新的图片加载框架,它的全名叫做coroutine image loader,即协程图片加载库。与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势。

 

它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。

 

示例如下:

 

 
  1. imageView.load(“https://www.example.com/image.jpg") {
  2.  crossfade(true)
  3.  placeholder(R.drawable.image)
  4.  transformations(CircleCropTransformation())
  5. }

 

并且是全用Kotlin编写,如果你是纯Kotlin项目的话,那么这个库应该是你的首选。

 

Github地址:

https://github.com/coil-kt/coil

 

2

MultiSearchView

 

 

库具有一个非常酷的Search View动画!

 

使用非常简单,并且可以自定义,你可以在在styles.xml下添加自定义样式。

 

示例代码:

 

  1. <com.iammert.library.ui.multisearchviewlib.MultiSearchView
  2.         android:layout_width="match_parent"
  3.         android:layout_height="wrap_content"/>     

 

  1. multiSearchView.setSearchViewListener(object : MultiSearchView.MultiSearchViewListener{
  2.     override fun onItemSelected(index: Int, s: CharSequence) {
  3.     }
  4.     override fun onTextChanged(index: Int, s: CharSequence) {
  5.     }
  6.     override fun onSearchComplete(index: Int, s: CharSequence) {
  7.     }
  8.     override fun onSearchItemRemoved(index: Int) {
  9.     }
  10. })

 

自定义样式:

 

  1. <!-- Search Text Style. -->
  2. <style name="SearchTextStyle">
  3.     <!-- Custom values write to here for SearchEditText. -->
  4.     <item name="android:focusable">true</item>
  5.     <item name="android:focusableInTouchMode">true</item>
  6.     <item name="android:enabled">true</item>
  7.     <item name="android:hint">Search</item>
  8.     <item name="android:imeOptions">actionSearch</item>
  9.     <item name="android:textSize">18sp</item>
  10.     <item name="android:maxLength">15</item>
  11.     <item name="android:inputType">textCapSentences</item>
  12.     <item name="android:textColorHint">#80999999</item>
  13.     <item name="android:textColor">#000</item>
  14. </style>

 

然后,您应该将样式设置为MultiSearchView下的app:searchTextStyle。

 

Github地址:

https://github.com/iammert/MultiSearchView

 

3

CalendarView

 

 

CalendarView是一个高度可定制化的日历组件库,用recycleView实现。

 

它有如下特性:

 

  • 单一或范围选择

  • 周历或者月历模式

  • 边界日期

  • 自定义日历视图

  • 水平或者垂直滚动模式

  • 完全可定制的视图

 

该库的文档也非常全面,并包含许多示例。此外,还有一个示例应用程序展示了库的所有功能。

 

它是用纯Kotlin编写的,并在MIT许可下发布。如果您需要在应用程序中使用日历视图,这是一个不错的选择。

 

注意:该库通过Java 8+ API使用了java.time类,以便向后兼容,因为这些类是在Java 8中添加的。

 

因此,需要在app的build.gradle 中添加如下配置:

 

  1. android {
  2.   defaultConfig {
  3.     // Required ONLY when setting minSdkVersion to 20 or lower
  4.     multiDexEnabled true
  5.   }
  6.   compileOptions {
  7.     // Flag to enable support for the new language APIs
  8.     coreLibraryDesugaringEnabled true
  9.     // Sets Java compatibility to Java 8
  10.     sourceCompatibility JavaVersion.VERSION_1_8
  11.     targetCompatibility JavaVersion.VERSION_1_8
  12.   }
  13. }
  14. dependencies {
  15.   coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:<latest-version>'
  16. }
 

Github: 

https://github.com/kizitonwose/CalendarView

 

4

Bubble Navigation

 

FloatingTopBarActivityTopBarActivity
BottomBarActivityEqualBottomBarActivity

 

Bubble Navigation是一个轻巧的库,可通过大量自定义选项轻松制作精美的导航栏。

 

它有很多非常的特性:

 

  • 针对不同用例的两种类型的NavigationViews:

    • BubbleNavigationConstraintView(支持spreadspread,inside, 和 packed莫斯)

    • BubbleNavigationLinearView(允许平均分配,使用权重或packed模式)

  • 高度可定制化

  • 您可以添加小红点,它具有BubbleToggleView来创建新的UI组件,而不仅仅是导航

 

示例:

 

  1. <com.gauravk.bubblenavigation.BubbleNavigationConstraintView
  2.     android:id="@+id/top_navigation_constraint"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="wrap_content"
  5.     android:layout_marginBottom="380dp"
  6.     android:background="@color/white"
  7.     android:elevation="4dp"
  8.     android:padding="12dp"
  9.     app:bnc_mode="spread">
  10.     <com.gauravk.bubblenavigation.BubbleToggleView
  11.         android:id="@+id/c_item_rest"
  12.         android:layout_width="wrap_content"
  13.         android:layout_height="wrap_content"
  14.         app:bt_active="true"
  15.         app:bt_colorActive="@color/search_active"
  16.         app:bt_colorInactive="@color/search_inactive"
  17.         app:bt_icon="@drawable/ic_restaurant"
  18.         app:bt_shape="@drawable/transition_background_drawable_restaurant"
  19.         app:bt_title="@string/restaurant"
  20.         app:bt_padding="@dimen/internal_padding"
  21.         app:bt_titlePadding="@dimen/title_padding" />
  22.      <!-- Add more child items here - max upto 5 -->
  23. </com.gauravk.bubblenavigation.BubbleNavigationConstraintView>
 

Github文档很完善,有很多示例,更多用法和属性可去Github了解。

https://github.com/gauravk95/bubble-navigation

 

5

FabFilter

 

 

这是一个有趣的项目,它不是一个直接可用的库,而是一个示例应用程序,展示了使用和不使用 MotionLayout两种方式来实现的高级UI动画。

 

Github:

https://github.com/nikhilpanju/FabFilter

 

6

android-showcase

 

 

android-showcase是一个非常优秀的开源项目,它是一个展示应用程序,展示了如何使用Kotlin和最新的Jetpack 技术栈来开发一个APP。

 

该项目为您带来了一系列最佳实践,工具和解决方案:

 

  • 100% Kotlin

  • 现代架构 (feature modules, clean architecture, Model-View-ViewModel, Model-View-Intent)

  • Android Jetpack组件

  • 单Activity模式,使用Navigation导航

 

看完这个项目,在模块化,Clean体系结构,测试、设置CI / CD工具,等方面,你将会受到启发。感谢作者的开源。

 

Github:

https://github.com/igorwojda/android-showcase

 

7

Croppy

 

Croppy是一个Android图片裁剪库。

 

它有很多强大的特性:

 

  • 双指缩放

  • 裁剪任意大小

  • 按照长宽比例裁剪

  • 显示裁剪后的Bitmap

  • 自动居中裁剪

  • 全面的动画使用体验

 

更多使用细节请看Github。

 

Github: 

https://github.com/lyrebirdstudio/Croppy

 

8

RubberPicker

 

 

一个炫酷的、有趣的SeekBar动画库。

 

RubberPicker库包含RubberSeekBar和RubberRangePicker,其灵感来自Cuberto的iOS橡胶范围选择器。

 

使用示例:

 

布局文件中配置

 

  1. <com.jem.rubberpicker.RubberSeekBar
  2.   ...
  3.   app:minValue="20"
  4.   app:maxValue="80"
  5.   app:elasticBehavior="cubic"
  6.   app:dampingRatio="0.3"
  7.   app:stiffness="300"
  8.   app:stretchRange="24dp"
  9.   app:defaultThumbRadius="16dp"
  10.   app:normalTrackWidth="4dp"
  11.   app:highlightTrackWidth="8dp"
  12.   app:normalTrackColor="#AAAAAA"
  13.   app:highlightTrackColor="#BA1F33"
  14.   app:defaultThumbInsideColor="#FFF"
  15.   app:highlightDefaultThumbOnTouchColor="#CD5D67"/>
  16. <!-- Similar attributes can be applied for RubberRangePicker as well-->
  17. <com.jem.rubberpicker.RubberRangePicker
  18.   ...
  19.   app:minValue="0"
  20.   app:maxValue="100"
  21.   app:elasticBehavior="linear"
  22.   app:dampingRatio="0.4"
  23.   app:stiffness="400"
  24.   app:stretchRange="36dp"
  25.   app:defaultThumbRadius="16dp"
  26.   app:normalTrackWidth="4dp"
  27.   app:highlightTrackWidth="8dp"
  28.   app:normalTrackColor="#AAAAAA"
  29.   app:highlightTrackColor="#BA1F33"
  30.   app:defaultThumbInsideColor="#CFCD5D67"
  31.   app:highlightDefaultThumbOnTouchColor="#CD5D67"/>
 

或者,在代码中动态配置:

 

  1. val rubberSeekBar = RubberSeekBar(this)
  2. rubberSeekBar.setMin(20)
  3. rubberSeekBar.setMax(80)
  4. rubberSeekBar.setElasticBehavior(ElasticBehavior.CUBIC)
  5. rubberSeekBar.setDampingRatio(0.4F)
  6. rubberSeekBar.setStiffness(1000F)
  7. rubberSeekBar.setStretchRange(50f)
  8. rubberSeekBar.setThumbRadius(32f)
  9. rubberSeekBar.setNormalTrackWidth(2f)
  10. rubberSeekBar.setHighlightTrackWidth(4f)
  11. rubberSeekBar.setNormalTrackColor(Color.GRAY)
  12. rubberSeekBar.setHighlightTrackColor(Color.BLUE)
  13. rubberSeekBar.setHighlightThumbOnTouchColor(Color.CYAN)
  14. rubberSeekBar.setDefaultThumbInsideColor(Color.WHITE)
  15. val currentValue = rubberSeekBar.getCurrentValue()
  16. rubberSeekBar.setCurrentValue(currentValue + 10)
  17. rubberSeekBar.setOnRubberSeekBarChangeListener(object : RubberSeekBar.OnRubberSeekBarChangeListener {
  18.     override fun onProgressChanged(seekBar: RubberSeekBar, value: Int, fromUser: Boolean) {}
  19.     override fun onStartTrackingTouch(seekBar: RubberSeekBar) {}
  20.     override fun onStopTrackingTouch(seekBar: RubberSeekBar) {}
  21. })
  22. //Similarly for RubberRangePicker
  23. val rubberRangePicker = RubberRangePicker(this)
  24. rubberRangePicker.setMin(20)
  25. ...
  26. rubberRangePicker.setHighlightThumbOnTouchColor(Color.CYAN)
  27. val startThumbValue = rubberRangePicker.getCurrentStartValue()
  28. rubberRangePicker.setCurrentStartValue(startThumbValue + 10)
  29. val endThumbValue = rubberRangePicker.getCurrentEndValue()
  30. rubberRangePicker.setCurrentEndValue(endThumbValue + 10)
  31. rubberRangePicker.setOnRubberRangePickerChangeListener(object: RubberRangePicker.OnRubberRangePickerChangeListener{
  32.     override fun onProgressChanged(rangePicker: RubberRangePicker, startValue: Int, endValue: Int, fromUser: Boolean) {}
  33.     override fun onStartTrackingTouch(rangePicker: RubberRangePicker, isStartThumb: Boolean) {}
  34.     override fun onStopTrackingTouch(rangePicker: RubberRangePicker, isStartThumb: Boolean) {}
  35. })
 

更多、更详细的使用请看Github。

Github:

https://github.com/Chrisvin/RubberPicker

 

9

Switcher

 

 

一个炫酷的Switcher 切换动画库,真是的太可爱了,它的灵感来自于 Dribble上Oleg Frolov的设计。

 

Github: 

https://github.com/bitvale/Switcher

 

10

StfalconImageViewer

 

StfalconImageViewer是一个图片查看库, 该库简单且可定制。它包含一个全屏图像查看器,具有共享的图像过渡支持,捏合缩放功能以及滑动手势来关闭手势。

 

Github文档说明了如何使用每个功能。同样值得注意的是:该库与所有最受欢迎的图像处理库(例如Picasso,Glide等)兼容。

 

所有可配置项如下:

 

  1. StfalconImageViewer.Builder<String>(this, images, ::loadImage)
  2.       .withStartPosition(startPosition)
  3.       .withBackgroundColor(color)
  4.       //.withBackgroundColorResource(R.color.color)
  5.       .withOverlayView(view)
  6.       .withImagesMargin(R.dimen.margin)
  7.       //.withImageMarginPixels(margin)
  8.       .withContainerPadding(R.dimen.padding)
  9.       //.withContainerPadding(R.dimen.paddingStart, R.dimen.paddingTop, R.dimen.paddingEnd, R.dimen.paddingBottom)
  10.       //.withContainerPaddingPixels(padding)
  11.       //.withContainerPaddingPixels(paddingStart, paddingTop, paddingEnd, paddingBottom)
  12.       .withHiddenStatusBar(shouldHideStatusBar)
  13.       .allowZooming(isZoomingAllowed)
  14.       .allowSwipeToDismiss(isSwipeToDismissAllowed)
  15.       .withTransitionFrom(targeImageView)
  16.       .withImageChangeListener(::onImageChanged)
  17.       .withDismissListener(::onViewerDismissed)
  18.       .withDismissListener(::onViewerDismissed)

 

更详细的使用请看Github。

 

Github: 

https://github.com/stfalcon-studio/StfalconImageViewer

 

11

Broccoli

 

Broccoli是一个show View Loading 库,也就是我常说的骨架屏,在内容加载的时候,显示一个占位符。

 

该库带有很平滑的动画效果,你可以配合RecyclerView一起使用,等待加载内容时,再也不枯燥了。

 

示例:

 

  1. Broccoli broccoli = new Broccoli();
  2. //add the default style placeholder
  3. broccoli.addPlaceholders('activity''view_id''view_id'); 
  4. or 
  5. //add the default style placeholder
  6. broccoli.addPlaceholders('view1''view2''view3'); 
  7. or 
  8. //add the custom style placeholder
  9. broccoli.addPlaceholder(new PlaceholderParameter.Builder()
  10.                         .setView('view')
  11.                         .setAnimation('scaleAnimation');
  12.                         .setDrawable(DrawableUtils.createRectangleDrawable(placeHolderColor, 0))
  13.                         .build()); 
  14. or
  15. //add the custom style placeholder with gradient animation
  16. broccoli.addPlaceholder(new PlaceholderParameter.Builder()
  17.                         .setView('view')
  18.                         .setDrawable(new BroccoliGradientDrawable(Color.parseColor("#DDDDDD"),
  19.                             Color.parseColor("#CCCCCC"), 01000, new LinearInterpolator())
  20.                         .build()); 
  21. broccoli.show();

 

更多使用请看Github。

Github: 

https://github.com/samlss/Broccoli

 

12

Orbit MVI

 

 

这是一个用于Kotlin和Android的Model-View-Intent (MVI)框架。它的灵感来自Jake Wharton,RxFeedback和Mosby的“Managing State with RxJava”。

 

根据ReadMe所说:

Orbit在您的redux实现周围提供了尽可能小的结构,以使其易于使用,但您仍可以使用RxJava的强大功能。

 

redux系统可能如下所示:

 

  1. data class State(val total: Int = 0)
  2. data class AddAction(val number: Int)
  3. sealed class SideEffect {
  4.     data class Toast(val text: String) : SideEffect()
  5. }
  6. class CalculatorViewModel : OrbitViewModel<State, SideEffect> (State(), {
  7.     perform("addition")
  8.         .on<AddAction>()
  9.         .sideEffect { post(SideEffect.Toast("Adding ${event.number}")) }
  10.         .reduce {
  11.             currentState.copy(currentState.total + event.number)
  12.         }
  13.     ...
  14. })
 

activity / fragment 中:

 

  1. // Example of injection using koin, your DI system might differ
  2. private val viewModel by viewModel<CalculatorViewModel>()
  3. override fun onCreate() {
  4.     ...
  5.     addButton.setOnClickListener { viewModel.sendAction(AddAction) }
  6. }
  7. override fun onStart() {
  8.     viewModel.connect(this, ::handleState, ::handleSideEffect)
  9. }
  10. private fun handleState(state: State) {
  11.     ...
  12. }
  13. private fun handleSideEffect(sideEffect: SideEffect) {
  14.     when (sideEffect) {
  15.         is SideEffect.Toast -> toast(sideEffect.text)
  16.     }
  17. }
 

详细使用请看Github。

 

Github: 

https://github.com/babylonhealth/orbit-mvi

 

13

IndicatorScrollView

 

该库为NestedScrollView添加了逻辑,使它可以在滚动时,更改对指示器进行动态响应。

 

README文件包含开始项目所需的所有信息,例如如何使用IndicatorScrollView,IndicatorView和IndicatorItem。目前,它的版本为1.0.2,是根据Apache 2.0许可发布的。它支持API 16及更高版本。

 

文档示例很详细,更多使用相关请看Github。

 

Github:

https://github.com/skydoves/IndicatorScrollView

 

14

Cyanea

 

 

Cyanea 是一个Android 主题引擎库。

 

 

它允许那你动态更换应用主题,它内置了很多主题如:

 

  • Theme.Cyanea.Dark

  • Theme.Cyanea.Dark.LightActionBar

  • Theme.Cyanea.Dark.NoActionBar

  • Theme.Cyanea.Light

  • Theme.Cyanea.Light.DarkActionBar

  • Theme.Cyanea.Light.NoActionBar

 

更多详细信息请看Github。

 

Github: 

https://github.com/jaredrummler/Cyanea

 

15

Android MotionLayout Carousel

 

这是一个示例项目,它展示了如何使用MotionLayout来实现一个炫酷的轮播图。

 

文档几乎没有任何说明,但是如果你最近也在探索MotionLayout,这将是一个很好示例。

 

Github: 

https://github.com/faob-dev/MotionLayoutCarouse

 

以上就是本期的开源项目推荐,周末祝好,我要去上班了。

 

 


 

最后推荐一下我做的网站,玩Android: wanandroid.com ,包含详尽的知识体系、好用的工具,还有本公众号文章合集,欢迎体验和收藏!

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/534770
推荐阅读
相关标签
  

闽ICP备14008679号