哈嘍蝎抽,大家好,我是西哥路克!
又到了大家最喜歡了的環(huán)節(jié)--開源庫推薦樟结,前面為大家推薦了我收藏的一些非常酷的開源庫精算,受到大家一致好評瓢宦,還沒看過的,請移步至:
【2020年GitHub 上那些優(yōu)秀Android開源庫驮履,這里是Top10!】
本期又為大家?guī)砹四男┯腥さ膸炷亓溃勘酒跒榇蠹揖x了15
個有趣又有用的開源玫镐,排名不分先后
,一起來看看吧怠噪!
1. Coil
Coil是Android上的一個全新的圖片加載框架恐似,它的全名叫做coroutine image loader
,即協(xié)程圖片加載庫。與傳統(tǒng)的圖片加載庫Glide傍念,Picasso或Fresco等相比矫夷。該具有輕量(只有大約1500個方法)、快憋槐、易于使用双藕、更現(xiàn)代的API等優(yōu)勢。
它支持GIF和SVG阳仔,并且可以執(zhí)行四個默認轉(zhuǎn)換:模糊
忧陪,圓形裁剪
,灰度
和圓角
。
示例如下:
imageView.load(“https://www.example.com/image.jpg") {
crossfade(true)
placeholder(R.drawable.image)
transformations(CircleCropTransformation())
}
并且是全用Kotlin編寫嘶摊,如果你是純Kotlin項目的話延蟹,那么這個庫應(yīng)該是你的首選。
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>
然后果录,您應(yīng)該將樣式設(shè)置為MultiSearchView
下的app:searchTextStyle
上枕。
Github地址:https://github.com/iammert/MultiSearchView
3. CalendarView
CalendarView
是一個高度可定制化的日歷組件庫,用recycleView實現(xiàn)弱恒。
它有如下特性:
- 單一或范圍選擇
- 周歷或者月歷模式
- 邊界日期
- 自定義日歷視圖
- 水平或者垂直滾動模式
- 完全可定制的視圖
該庫的文檔也非常全面辨萍,并包含許多示例。此外返弹,還有一個示例應(yīng)用程序展示了庫的所有功能锈玉。
它是用純Kotlin編寫的,并在MIT許可下發(fā)布义起。如果您需要在應(yīng)用程序中使用日歷視圖拉背,這是一個不錯的選擇。
注意:該庫通過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/kizitonwose/CalendarView
4. Bubble Navigation
FloatingTopBarActivity | TopBarActivity |
---|---|
BottomBarActivity | EqualBottomBarActivity |
---|---|
Bubble Navigation
是一個輕巧的庫两疚,可通過大量自定義選項輕松制作精美的導(dǎo)航欄。
它有很多非常的特性:
-
針對不同用例的兩種類型的
NavigationViews
:BubbleNavigationConstraintView
(支持spreadspread
含滴,inside
, 和packed
莫斯)BubbleNavigationLinearView
(允許平均分配诱渤,使用權(quán)重或packed模式)
高度可定制化
您可以添加小紅點,它具有
BubbleToggleView
來創(chuàng)建新的UI組件谈况,而不僅僅是導(dǎo)航
示例:
<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/bubble-navigation
5. FabFilter
這是一個有趣的項目励烦,它不是一個直接可用的庫,而是一個示例應(yīng)用程序泼诱,展示了使用
和不使用
MotionLayout
兩種方式來實現(xiàn)的高級UI動畫坛掠。
詳細的實現(xiàn)細節(jié)可以看看Medium上的系列文章:
“Complex UI/Animations on Android”
“Complex UI/Animations on Android — featuring MotionLayout”
Github:https://github.com/nikhilpanju/FabFilter
6.android-showcase
android-showcase
是一個非常優(yōu)秀的開源項目,它是一個展示應(yīng)用程序,展示了如何使用Kotlin和最新的Jetpack 技術(shù)棧來開發(fā)一個APP屉栓。
該項目為您帶來了一系列最佳實踐舷蒲,工具和解決方案:
- 100% Kotlin
- 現(xiàn)代架構(gòu) (feature modules, clean architecture, Model-View-ViewModel, Model-View-Intent)
- Android Jetpack組件
- 單Activity模式,使用Navigation導(dǎo)航
看完這個項目友多,在模塊化牲平,Clean體系結(jié)構(gòu),測試域滥、設(shè)置CI / CD工具纵柿,等方面,你將會受到啟發(fā)启绰。感謝作者的開源昂儒。
Github:https://github.com/igorwojda/android-showcase
7. Croppy
[圖片上傳失敗...(image-cf4104-1596436309874)]
Croppy
是一個Android圖片裁剪庫。
它有很多強大的特性:
- 雙指縮放
- 裁剪任意大小
- 按照長寬比例裁剪
- 顯示裁剪后的Bitmap
- 自動居中裁剪
- 全面的動畫使用體驗
更多使用細節(jié)請看Github委可。
Github: https://github.com/lyrebirdstudio/Croppy
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"/>
或者,在代碼中動態(tài)配置:
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/RubberPicker
9. Switcher
一個炫酷的Switcher 切換動畫庫,真是的太可愛了虎眨,我前面也寫過文章專門介紹過:
它的靈感來自于 Dribble上Oleg Frolov
的設(shè)計。
Github: https://github.com/bitvale/Switcher
10. StfalconImageViewer
StfalconImageViewer
是一個圖片查看庫嗽桩,
該庫簡單且可定制岳守。它包含一個全屏圖像查看器
,具有共享的圖像過渡支持碌冶,捏合縮放功能
以及滑動手勢來關(guān)閉
手勢湿痢。
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-studio/StfalconImageViewer
11. Broccoli
Broccoli
是一個show View Loading 庫罐氨,也就是我常說的骨架屏臀规,在內(nèi)容加載的時候,顯示一個占位符栅隐。
該庫帶有很平滑的動畫效果塔嬉,你可以配合RecyclerView一起使用玩徊,等待加載內(nèi)容時,再也不枯燥了谨究。
示例:
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/Broccoli
12. Orbit MVI
這是一個用于Kotlin和Android的Model-View-Intent (MVI)框架。它的靈感來自Jake Wharton胶哲,RxFeedback和Mosby的“Managing State with RxJava”畔塔。
根據(jù)ReadMe所說:
Orbit在您的redux實現(xiàn)周圍提供了盡可能小的結(jié)構(gòu),以使其易于使用鸯屿,但您仍可以使用RxJava的強大功能澈吨。
redux系統(tǒng)可能如下所示:
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/babylonhealth/orbit-mvi
13. IndicatorScrollView
IndicatorScrollView | IndicatorScrollView |
---|---|
該庫為NestedScrollView
添加了邏輯碾盟,使它可以在滾動時棚辽,更改對指示器進行動態(tài)響應(yīng)技竟。
README文件包含開始項目所需的所有信息冰肴,例如如何使用IndicatorScrollView
,IndicatorView
和IndicatorItem
榔组。目前,它的版本為1.0.2
熙尉,是根據(jù)Apache 2.0許可發(fā)布的。它支持API 16及更高版本搓扯。
文檔示例很詳細检痰,更多使用相關(guān)請看Github。
Github: https://github.com/skydoves/IndicatorScrollView
14. Cyanea
Cyanea
是一個Android 主題引擎庫锨推。
它允許那你動態(tài)更換應(yīng)用主題铅歼,它內(nèi)置了很多主題如:
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
來實現(xiàn)一個炫酷的輪播圖椎椰。
文檔幾乎沒有任何說明,但是如果你最近也在探索MotionLayout沾鳄,這將是一個很好示例慨飘。
Github: https://github.com/faob-dev/MotionLayoutCarousel
總結(jié)
以上就是本期的開源項目推薦,如果你也有好玩的译荞、有趣的瓤的、強大的開源項目,也可以推薦給西哥吞歼,歡迎評論區(qū)留言討論圈膏。
文章首發(fā)于公眾號:
「 技術(shù)最TOP 」
,每天都有干貨文章持續(xù)更新篙骡,可以微信搜索「 技術(shù)最TOP 」
第一時間閱讀稽坤,回復(fù)【思維導(dǎo)圖】【面試】【簡歷】有我準備一些Android進階路線桥帆、面試指導(dǎo)和簡歷模板送給你