Hello, everyone. I’m brother!
It’s our favorite part again–Open source library recommendationI have recommended some cool open source libraries I have collected, which have been highly praised by everyone. If you haven’t seen them yet, please move to:
[Android collection] recommend 10 cool open source libraries
[open source recommendation] advanced practical combat starts with a music player
[for those excellent Android open source libraries on GitHub in 2020, this is TOP10! ]
What interesting libraries have this issue brought to you? This issue is selected for you15
An interesting and useful open source,Rank in no order
Let’s have a look!
1. Coil
Coil is a new image loading framework on Android. Its full name is called coroutine image loader
, that is, the coprocessor image loading library. Compared with traditional image loading libraries such as glide, Picasso or fresco. It has the advantages of lightweight (only about 1500 methods), fast, easy to use, and more modern API.
It supports GIF and SVG, and can perform four default transformations:vague
,Circular cutting
,Gray scale
andfillet
。
Examples are as follows:
imageView.load(“https://www.example.com/image.jpg") {
crossfade(true)
placeholder(R.drawable.image)
transformations(CircleCropTransformation())
}
If you are a pure kotlin project, this library should be your first choice.
GitHub address: https://github.com/coil-kt/coil
2. MultiSearchView
The library has a very coolSearch View
Animation!
It’s very easy to use and can be customized. You can use thestyles.xml
Add custom style under.
Example code:
<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) {
}
})
Custom style:
<!-- 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>
Then, you should set the style toMultiSearchView
Under theapp:searchTextStyle
。
GitHub address: https://github.com/iammert/Mu…
3. CalendarView
CalendarView
It is a highly customized calendar component library, which is implemented by recycleview.
It has the following characteristics:
- Single or range selection
- Weekly or monthly calendar mode
- Boundary date
- Custom Calendar view
- Horizontal or vertical scrolling mode
- Fully customizable view
The library is also well documented and contains many examples. In addition, there is a sample application that shows all the functions of the library.
It was written in pure kotlin and released under the MIT license. If you need to use the calendar view in your application, this is a good choice.
Note: the library is used through the Java 8 + API java.time Class for backward compatibility because they were added in Java 8.
Therefore, you need to use thebuild.gradle
Add the following configuration:
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
Is a lightweight library, you can easily create exquisite navigation bar through a large number of custom options.
It has a lot of extraordinary features:
-
Two types of
NavigationViews
:BubbleNavigationConstraintView
(support spreadspread
,inside
, andpacked
Moss)BubbleNavigationLinearView
(allow equal distribution, using weight or packed mode)
- Highly customizable
- You can add a little red dot, which has
BubbleToggleView
To create new UI components, not just navigation
Example:
<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 documentation is very complete, there are many examples, more usage and properties can be found in GitHub.
Github:https://github.com/gauravk95/…
5. FabFilter
This is an interesting project that is not a directly available library, but a sample application that showsuse
andNot used
MotionLayout
Two ways to achieve advanced UI animation.
Detailed implementation details can be found in the series of articles on medium:
“Complex UI/Animations on Android”
“Complex UI/Animations on Android — featuring MotionLayout”
Github:https://github.com/nikhilpanj…
6.android-showcase
android-showcase
Is a very good open source project, it is a showcase application, shows how to use kotlin and the latest jetpack technology stack to develop an app.
The project brings you a range of best practices, tools and solutions:
- 100% Kotlin
- Feature modules, clean architecture, model view view model, model view intent
- Android jetpack component
- Single activity mode, navigation with navigation
After watching this project, you will be inspired by modularity, clean architecture, testing, setting up CI / CD tools, etc. Thank you for the open source.
Github:https://github.com/igorwojda/…
7. Croppy
Croppy
Is an Android image clipping library.
It has many powerful features:
- Double finger zoom
- Crop any size
- Cut according to length width ratio
- Show cropped bitmap
- Auto Center crop
- Comprehensive animation experience
See GitHub for more details.
Github: https://github.com/lyrebirdst…
8. RubberPicker
A cool and interesting seekbar animation library.
RubberPicker
Library containsRubberSeekBar
andRubberRangePicker
, inspired byCuberto
OfIOS rubber range selector
。
Examples of use:
Configuration in layout file
<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"/>
Or, dynamically configure in Code:
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) {}
})
See GitHub for more details.
Github:https://github.com/Chrisvin/R…
9. Switcher
A cool switcher switching animation library is really cute. I also wrote an article before, which specifically introduced:
Cool! I’ve never seen a switcher like this
It was inspired by dribbleOleg Frolov
Design.
Github: https://github.com/bitvale/Sw…
10. StfalconImageViewer
StfalconImageViewer
It’s a picture viewing library,
The library is simple and customizable. It contains aFull screen image viewer
,Shared image transition support,Kneading zoom function
as well asSwipe the gesture to close
Gestures.
GitHub documentation explains how to use each feature. It is also worth noting that the library is compatible with all the most popular image processing libraries (such as Picasso, glide, etc.).
All configurable items are as follows:
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)
See GitHub for more details.
Github: https://github.com/stfalcon-s…
11. Broccoli
Broccoli
It is a show view loading library, which is what I often saySkeleton screenWhen the content is loaded, a placeholder is displayed.
The library has a very smooth animation effect, you can use it with recyclerview, and it’s not boring when you wait for the content to load.
Example:
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();
For more use, see GitHub.
Github: https://github.com/samlss/Bro…
12. Orbit MVI
This is a model view intent (MVI) framework for kotlin and Android. It was inspired by Jake Wharton, rxfeedback and Mosby’s “managing state with rxjava.”.
According to readme:
Orbit provides the smallest possible structure around your Redux implementation to make it easy to use, but you can still use the power of rxjava.
The Redux system may be as follows:
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)
}
...
})
In 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)
}
}
See GitHub for details.
Github: https://github.com/babylonhea…
13. IndicatorScrollView
IndicatorScrollView | IndicatorScrollView |
---|---|
![]() |
![]() |
The library isNestedScrollView
Added logic to enable it to dynamically respond to the indicator as it scrolls.
The readme file contains all the information needed to start the project, such as how to use itIndicatorScrollView
,IndicatorView
andIndicatorItem
。 Currently, its version is1.0.2
Is released under the Apache 2.0 license. It supports API 16 and later.
The document example is very detailed. For more details, please refer to GitHub.
Github: https://github.com/skydoves/I…
14. Cyanea
Cyanea
Is an Android theme engine library.
It allows you to change the theme dynamically. It has many built-in themes, such as:
Theme.Cyanea.Dark
Theme.Cyanea.Dark.LightActionBar
Theme.Cyanea.Dark.NoActionBar
Theme.Cyanea.Light
Theme.Cyanea.Light.DarkActionBar
Theme.Cyanea.Light.NoActionBar
See GitHub for more details.
Github: https://github.com/jaredrumml…
15. Android MotionLayout Carousel
This is a sample project that shows how to use itMotionLayout
To achieve a cool rotation chart.
There’s almost no explanation in the documentation, but if you’ve been exploring motionlayout recently, this will be a good example.
Github: https://github.com/faob-dev/M…
summary
The above is the recommendation of open source projects in this issue. If you have interesting, interesting and powerful open source projects, you can also recommend them to Togo. Please leave a message in the comments area for discussion.