哈喽,大家好,我是西哥!
又到了大家最喜爱了的环节 –开源库举荐,后面为大家举荐了我珍藏的一些十分酷的开源库,受到大家统一好评,还没看过的,请移步至:
【Android 收藏】举荐 10 个炫酷的开源库
【开源举荐】进阶实战,从一款音乐播放器开始
【2020 年 GitHub 上那些优良 Android 开源库,这里是 Top10!】
本期又为大家带来了哪些乏味的库呢?本期为大家精选了 15
个乏味又有用的开源,排名不分先后
,一起来看看吧!
1. Coil
Coil 是 Android 上的一个全新的图片加载框架,它的全名叫做 coroutine image loader
, 即协程图片加载库。与传统的图片加载库 Glide,Picasso 或 Fresco 等相比。该具备轻量(只有大概 1500 个办法)、快、易于应用、更古代的 API 等劣势。
它反对 GIF 和 SVG,并且能够执行四个默认转换:含糊
, 圆形裁剪
, 灰度
和圆角
。
示例如下:
imageView.load(“https://www.example.com/image.jpg") {crossfade(true)
placeholder(R.drawable.image)
transformations(CircleCropTransformation())
}
并且是全用 Kotlin 编写,如果你是纯 Kotlin 我的项目的话,那么这个库应该是你的首选。
Github 地址:https://github.com/coil-kt/coil
2. MultiSearchView
该库具备一个十分酷的 Search View
动画!
应用非常简单,并且能够自定义,你能够在在 styles.xml
下增加自定义款式。
示例代码:
<com.iammert.library.ui.multisearchviewlib.MultiSearchView
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
multiSearchView.setSearchViewListener(object : MultiSearchView.MultiSearchViewListener{override fun onItemSelected(index: Int, s: CharSequence) { }
override fun onTextChanged(index: Int, s: CharSequence) { }
override fun onSearchComplete(index: Int, s: CharSequence) { }
override fun onSearchItemRemoved(index: Int) {}})
自定义款式:
<!-- Search Text Style. -->
<style name="SearchTextStyle">
<!-- Custom values write to here for SearchEditText. -->
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
<item name="android:enabled">true</item>
<item name="android:hint">Search</item>
<item name="android:imeOptions">actionSearch</item>
<item name="android:textSize">18sp</item>
<item name="android:maxLength">15</item>
<item name="android:inputType">textCapSentences</item>
<item name="android:textColorHint">#80999999</item>
<item name="android:textColor">#000</item>
</style>
而后,您应该将款式设置为 MultiSearchView
下的app:searchTextStyle
。
Github 地址:https://github.com/iammert/Mu…
3. CalendarView
CalendarView
是一个高度可定制化的日历组件库,用 recycleView 实现。
它有如下个性:
- 繁多或范畴抉择
- 周历或者月历模式
- 边界日期
- 自定义日历视图
- 程度或者垂直滚动模式
- 齐全可定制的视图
该库的文档也十分全面,并蕴含许多示例。此外,还有一个示例应用程序展现了库的所有性能。
它是用纯 Kotlin 编写的,并在 MIT 许可下公布。如果您须要在应用程序中应用日历视图,这是一个不错的抉择。
留神:该库通过 Java 8+ API 应用了 java.time 类,以便向后兼容,因为这些类是在 Java 8 中增加的。
因而,须要在 app 的build.gradle
中增加如下配置:
android {
defaultConfig {
// Required ONLY when setting minSdkVersion to 20 or lower
multiDexEnabled true
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:<latest-version>'}
Github: https://github.com/kizitonwos…
4. Bubble Navigation
FloatingTopBarActivity | TopBarActivity |
---|---|
BottomBarActivity | EqualBottomBarActivity |
---|---|
Bubble Navigation
是一个笨重的库,可通过大量自定义选项轻松制作精美的导航栏。
它有很多十分的个性:
-
针对不同用例的两种类型的
NavigationViews
:BubbleNavigationConstraintView
(反对 spreadspread
,inside
, 和packed
莫斯)BubbleNavigationLinearView
(容许平均分配,使用权重或 packed 模式)
- 高度可定制化
- 您能够增加小红点,它具备
BubbleToggleView
来创立新的 UI 组件,而不仅仅是导航
示例:
<com.gauravk.bubblenavigation.BubbleNavigationConstraintView
android:id="@+id/top_navigation_constraint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="380dp"
android:background="@color/white"
android:elevation="4dp"
android:padding="12dp"
app:bnc_mode="spread">
<com.gauravk.bubblenavigation.BubbleToggleView
android:id="@+id/c_item_rest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:bt_active="true"
app:bt_colorActive="@color/search_active"
app:bt_colorInactive="@color/search_inactive"
app:bt_icon="@drawable/ic_restaurant"
app:bt_shape="@drawable/transition_background_drawable_restaurant"
app:bt_title="@string/restaurant"
app:bt_padding="@dimen/internal_padding"
app:bt_titlePadding="@dimen/title_padding" />
<!-- Add more child items here - max upto 5 -->
</com.gauravk.bubblenavigation.BubbleNavigationConstraintView>
Github 文档很欠缺,有很多示例,更多用法和属性可去 Github 理解。
Github:https://github.com/gauravk95/…
5. FabFilter
这是一个乏味的我的项目,它不是一个间接可用的库,而是一个示例应用程序,展现了 应用
和不应用
MotionLayout
两种形式来实现的高级 UI 动画。
具体的实现细节能够看看 Medium 上的系列文章:
“Complex UI/Animations on Android”
“Complex UI/Animations on Android — featuring MotionLayout”
Github:https://github.com/nikhilpanj…
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/…
7. Croppy
Croppy
是一个 Android 图片裁剪库。
它有很多弱小的个性:
- 双指缩放
- 裁剪任意大小
- 依照长宽比例裁剪
- 显示裁剪后的 Bitmap
- 主动居中裁剪
- 全面的动画应用体验
更多应用细节请看 Github。
Github: https://github.com/lyrebirdst…
8. RubberPicker
一个炫酷的、乏味的 SeekBar 动画库。
RubberPicker
库蕴含 RubberSeekBar
和RubberRangePicker
,其灵感来自 Cuberto
的iOS 橡胶范畴选择器
。
应用示例:
布局文件中配置
<com.jem.rubberpicker.RubberSeekBar
...
app:minValue="20"
app:maxValue="80"
app:elasticBehavior="cubic"
app:dampingRatio="0.3"
app:stiffness="300"
app:stretchRange="24dp"
app:defaultThumbRadius="16dp"
app:normalTrackWidth="4dp"
app:highlightTrackWidth="8dp"
app:normalTrackColor="#AAAAAA"
app:highlightTrackColor="#BA1F33"
app:defaultThumbInsideColor="#FFF"
app:highlightDefaultThumbOnTouchColor="#CD5D67"/>
<!-- Similar attributes can be applied for RubberRangePicker as well-->
<com.jem.rubberpicker.RubberRangePicker
...
app:minValue="0"
app:maxValue="100"
app:elasticBehavior="linear"
app:dampingRatio="0.4"
app:stiffness="400"
app:stretchRange="36dp"
app:defaultThumbRadius="16dp"
app:normalTrackWidth="4dp"
app:highlightTrackWidth="8dp"
app:normalTrackColor="#AAAAAA"
app:highlightTrackColor="#BA1F33"
app:defaultThumbInsideColor="#CFCD5D67"
app:highlightDefaultThumbOnTouchColor="#CD5D67"/>
或者,在代码中动静配置:
val rubberSeekBar = RubberSeekBar(this)
rubberSeekBar.setMin(20)
rubberSeekBar.setMax(80)
rubberSeekBar.setElasticBehavior(ElasticBehavior.CUBIC)
rubberSeekBar.setDampingRatio(0.4F)
rubberSeekBar.setStiffness(1000F)
rubberSeekBar.setStretchRange(50f)
rubberSeekBar.setThumbRadius(32f)
rubberSeekBar.setNormalTrackWidth(2f)
rubberSeekBar.setHighlightTrackWidth(4f)
rubberSeekBar.setNormalTrackColor(Color.GRAY)
rubberSeekBar.setHighlightTrackColor(Color.BLUE)
rubberSeekBar.setHighlightThumbOnTouchColor(Color.CYAN)
rubberSeekBar.setDefaultThumbInsideColor(Color.WHITE)
val currentValue = rubberSeekBar.getCurrentValue()
rubberSeekBar.setCurrentValue(currentValue + 10)
rubberSeekBar.setOnRubberSeekBarChangeListener(object : RubberSeekBar.OnRubberSeekBarChangeListener {override fun onProgressChanged(seekBar: RubberSeekBar, value: Int, fromUser: Boolean) {}
override fun onStartTrackingTouch(seekBar: RubberSeekBar) {}
override fun onStopTrackingTouch(seekBar: RubberSeekBar) {}})
//Similarly for RubberRangePicker
val rubberRangePicker = RubberRangePicker(this)
rubberRangePicker.setMin(20)
...
rubberRangePicker.setHighlightThumbOnTouchColor(Color.CYAN)
val startThumbValue = rubberRangePicker.getCurrentStartValue()
rubberRangePicker.setCurrentStartValue(startThumbValue + 10)
val endThumbValue = rubberRangePicker.getCurrentEndValue()
rubberRangePicker.setCurrentEndValue(endThumbValue + 10)
rubberRangePicker.setOnRubberRangePickerChangeListener(object: RubberRangePicker.OnRubberRangePickerChangeListener{override fun onProgressChanged(rangePicker: RubberRangePicker, startValue: Int, endValue: Int, fromUser: Boolean) {}
override fun onStartTrackingTouch(rangePicker: RubberRangePicker, isStartThumb: Boolean) {}
override fun onStopTrackingTouch(rangePicker: RubberRangePicker, isStartThumb: Boolean) {}})
更多、更具体的应用请看 Github。
Github:https://github.com/Chrisvin/R…
9. Switcher
一个炫酷的 Switcher 切换动画库,真是的太可恶了,我后面也写过文章专门介绍过:
炫酷!从未见过如此 Q 弹的 Switcher
它的灵感来自于 Dribble 上 Oleg Frolov
的设计。
Github: https://github.com/bitvale/Sw…
10. StfalconImageViewer
StfalconImageViewer
是一个图片查看库,
该库简略且可定制。它蕴含一个 全屏图像查看器
, 具备共享的图像过渡反对 , 捏合缩放性能
以及 滑动手势来敞开
手势。
Github 文档阐明了如何应用每个性能。同样值得注意的是:该库与所有最受欢迎的图像处理库(例如 Picasso,Glide 等)兼容。
所有可配置项如下:
StfalconImageViewer.Builder<String>(this, images, ::loadImage)
.withStartPosition(startPosition)
.withBackgroundColor(color)
//.withBackgroundColorResource(R.color.color)
.withOverlayView(view)
.withImagesMargin(R.dimen.margin)
//.withImageMarginPixels(margin)
.withContainerPadding(R.dimen.padding)
//.withContainerPadding(R.dimen.paddingStart, R.dimen.paddingTop, R.dimen.paddingEnd, R.dimen.paddingBottom)
//.withContainerPaddingPixels(padding)
//.withContainerPaddingPixels(paddingStart, paddingTop, paddingEnd, paddingBottom)
.withHiddenStatusBar(shouldHideStatusBar)
.allowZooming(isZoomingAllowed)
.allowSwipeToDismiss(isSwipeToDismissAllowed)
.withTransitionFrom(targeImageView)
.withImageChangeListener(::onImageChanged)
.withDismissListener(::onViewerDismissed)
.withDismissListener(::onViewerDismissed)
更具体的应用请看 Github。
Github: https://github.com/stfalcon-s…
11. Broccoli
Broccoli
是一个 show View Loading 库,也就是我常说的 骨架屏,在内容加载的时候,显示一个占位符。
该库带有很平滑的动画成果,你能够配合 RecyclerView 一起应用,期待加载内容时,再也不干燥了。
示例:
Broccoli broccoli = new Broccoli();
//add the default style placeholder
broccoli.addPlaceholders('activity', 'view_id', 'view_id');
or
//add the default style placeholder
broccoli.addPlaceholders('view1', 'view2', 'view3');
or
//add the custom style placeholder
broccoli.addPlaceholder(new PlaceholderParameter.Builder()
.setView('view')
.setAnimation('scaleAnimation');
.setDrawable(DrawableUtils.createRectangleDrawable(placeHolderColor, 0))
.build());
or
//add the custom style placeholder with gradient animation
broccoli.addPlaceholder(new PlaceholderParameter.Builder()
.setView('view')
.setDrawable(new BroccoliGradientDrawable(Color.parseColor("#DDDDDD"),
Color.parseColor("#CCCCCC"), 0, 1000, new LinearInterpolator())
.build());
broccoli.show();
更多应用请看 Github。
Github: https://github.com/samlss/Bro…
12. Orbit MVI
这是一个用于 Kotlin 和 Android 的 Model-View-Intent(MVI)框架。它的灵感来自 Jake Wharton,RxFeedback 和 Mosby 的“Managing State with RxJava”。
依据 ReadMe 所说:
Orbit 在您的 redux 实现四周提供了尽可能小的构造,以使其易于应用,但您仍能够应用 RxJava 的弱小性能。
redux 零碎可能如下所示:
data class State(val total: Int = 0)
data class AddAction(val number: Int)
sealed class SideEffect {data class Toast(val text: String) : SideEffect()}
class CalculatorViewModel : OrbitViewModel<State, SideEffect> (State(), {perform("addition")
.on<AddAction>()
.sideEffect {post(SideEffect.Toast("Adding ${event.number}")) }
.reduce {currentState.copy(currentState.total + event.number)
}
...
})
activity / fragment 中:
// Example of injection using koin, your DI system might differ
private val viewModel by viewModel<CalculatorViewModel>()
override fun onCreate() {
...
addButton.setOnClickListener {viewModel.sendAction(AddAction) }
}
override fun onStart() {viewModel.connect(this, ::handleState, ::handleSideEffect)
}
private fun handleState(state: State) {...}
private fun handleSideEffect(sideEffect: SideEffect) {when (sideEffect) {is SideEffect.Toast -> toast(sideEffect.text)
}
}
具体应用请看 Github。
Github: https://github.com/babylonhea…
13. IndicatorScrollView
IndicatorScrollView | IndicatorScrollView |
---|---|
该库为 NestedScrollView
增加了逻辑,使它能够在滚动时,更改对指示器进行动静响应。
README 文件蕴含开始我的项目所需的所有信息,例如如何应用 IndicatorScrollView
,IndicatorView
和IndicatorItem
。目前, 它的版本为1.0.2
,是依据 Apache 2.0 许可公布的。它反对 API 16 及更高版本。
文档示例很具体,更多应用相干请看 Github。
Github:https://github.com/skydoves/I…
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/jaredrumml…
15. Android MotionLayout Carousel
这是一个示例我的项目,它展现了如何应用 MotionLayout
来实现一个炫酷的轮播图。
文档简直没有任何阐明,然而如果你最近也在摸索 MotionLayout,这将是一个很好示例。
Github: https://github.com/faob-dev/M…
总结
以上就是本期的开源我的项目举荐,如果你也有好玩的、乏味的、弱小的开源我的项目,也能够举荐给西哥,欢送评论区留言探讨。