哈嘍,你們好,我是西哥!java
又到了你們最喜歡了的環節--開源庫推薦,前面爲你們推薦了我收藏的一些很是酷的開源庫,受到你們一致好評,還沒看過的,請移步至:android
【開源推薦】進階實戰,從一款音樂播放器開始github
【2020年GitHub 上那些優秀Android開源庫,這裏是Top10!】redux
本期又爲你們帶來了哪些有趣的庫呢?本期爲你們精選了15
個有趣又有用的開源,排名不分前後
,一塊兒來看看吧!架構
Coil是Android上的一個全新的圖片加載框架,它的全名叫作 coroutine image loader
,即協程圖片加載庫。與傳統的圖片加載庫Glide,Picasso或Fresco等相比。該具備輕量(只有大約1500個方法)、快、易於使用、更現代的API等優點。app
它支持GIF和SVG,而且能夠執行四個默認轉換:模糊
,圓形裁剪
,灰度
和圓角
。框架
示例以下:ide
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
該庫具備一個很是酷的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...
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...
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/...
這是一個有趣的項目,它不是一個直接可用的庫,而是一個示例應用程序,展現了使用
和不使用
MotionLayout
兩種方式來實現的高級UI動畫。
詳細的實現細節能夠看看Medium上的系列文章:
「Complex UI/Animations on Android」
「Complex UI/Animations on Android — featuring MotionLayout」
Github:https://github.com/nikhilpanj...
android-showcase
是一個很是優秀的開源項目,它是一個展現應用程序,展現瞭如何使用Kotlin和最新的Jetpack 技術棧來開發一個APP。
該項目爲您帶來了一系列最佳實踐,工具和解決方案:
看完這個項目,在模塊化,Clean體系結構,測試、設置CI / CD工具,等方面,你將會受到啓發。感謝做者的開源。
Github:https://github.com/igorwojda/...
Croppy
是一個Android圖片裁剪庫。
它有不少強大的特性:
更多使用細節請看Github。
Github: https://github.com/lyrebirdst...
一個炫酷的、有趣的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...
一個炫酷的Switcher 切換動畫庫,真是的太可愛了,我前面也寫過文章專門介紹過:
它的靈感來自於 Dribble上Oleg Frolov
的設計。
Github: https://github.com/bitvale/Sw...
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...
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...
這是一個用於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...
IndicatorScrollView | IndicatorScrollView |
---|---|
![]() |
![]() |
該庫爲NestedScrollView
添加了邏輯,使它能夠在滾動時,更改對指示器進行動態響應。
README文件包含開始項目所需的全部信息,例如如何使用IndicatorScrollView
,IndicatorView
和IndicatorItem
。目前,它的版本爲1.0.2
,是根據Apache 2.0許可發佈的。它支持API 16及更高版本。
文檔示例很詳細,更多使用相關請看Github。
Github: https://github.com/skydoves/I...
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...
這是一個示例項目,它展現瞭如何使用MotionLayout
來實現一個炫酷的輪播圖。
文檔幾乎沒有任何說明,可是若是你最近也在探索MotionLayout,這將是一個很好示例。
Github: https://github.com/faob-dev/M...
以上就是本期的開源項目推薦,若是你也有好玩的、有趣的、強大的開源項目,也能夠推薦給西哥,歡迎評論區留言討論。