非常实用的GitHub项目

公众号:码农乐园 等级 412 0 0

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

  1. 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) {
}

}) 自定义样式: 然后,您应该将样式设置为MultiSearchView下的app:searchTextStyle。 Github地址:https://github.com/iammert/MultiSearchView

  1. 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:' } Github: github.com/kizitonwose… 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/bubble-navigation

  1. FabFilter

这是一个有趣的项目,它不是一个直接可用的库,而是一个示例应用程序,展示了使用和不使用 MotionLayout两种方式来实现的高级UI动画。 详细的实现细节可以看看Medium上的系列文章: “Complex UI/Animations on Android” “Complex UI/Animations on Android — featuring MotionLayout” 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

  1. Croppy

Croppy是一个Android图片裁剪库。 它有很多强大的特性: 双指缩放 裁剪任意大小 按照长宽比例裁剪 显示裁剪后的Bitmap 自动居中裁剪 全面的动画使用体验 更多使用细节请看Github。 Github: https://github.com/lyrebirdstudio/Croppy

  1. 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"/>

<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/RubberPicker

  1. Switcher

一个炫酷的Switcher 切换动画库,真是的太可爱了,我前面也写过文章专门介绍过: 炫酷!从未见过如此Q弹的Switcher 它的灵感来自于 Dribble上Oleg Frolov 的设计。 Github: https://github.com/bitvale/Switcher 10. StfalconImageViewer

StfalconImageViewer是一个图片查看库, 该库简单且可定制。它包含一个全屏图像查看器,具有共享的图像过渡支持,捏合缩放功能以及滑动手势来关闭手势。 Github文档说明了如何使用每个功能。同样值得注意的是:该库与所有最受欢迎的图像处理库(例如Picasso,Glide等)兼容。 所有可配置项如下: StfalconImageViewer.Builder(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

  1. 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/Broccoli

  1. 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()

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添加了逻辑,使它可以在滚动时,更改对指示器进行动态响应。 README文件包含开始项目所需的所有信息,例如如何使用IndicatorScrollView,IndicatorView和IndicatorItem。目前,它的版本为1.0.2,是根据Apache 2.0许可发布的。它支持API 16及更高版本。 文档示例很详细,更多使用相关请看Github。 Github: https://github.com/skydoves/IndicatorScrollView

  1. 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

  1. Android MotionLayout Carousel

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

文档几乎没有任何说明,但是如果你最近也在探索MotionLayout,这将是一个很好示例。 Github: https://github.com/faob-dev/MotionLayoutCarousel

最后,考虑到公众号的链接不能直接跳转,需要的复制链接的关注公众号 码农乐园 回复:GitHub链接

收藏
评论区

相关推荐

GitHub最牛的Android开源项目,金三银四
Android目前也是非常成熟的,如今移动的变化也是比较大,不管是从Android系统本身的变化还是语言上,自从17年kotlin的作为第一语言,涉及到Android系统周边的非常之多内容,若全部自己去实现及掌握可能需要花费很多的精力,现在github中有很多非常优秀的项目,快速的学习及掌握; 1,视频播放器,基于IJKPlayer(兼容系统MediaPl
AT大牛带你深度剖析Android 10大开源框架
做了几年的Android开发,也面试过不少公司,被面试过,也面试过不少人,其实Android的技术真的是无边界,不管你做过多牛的项目,不管你多久的经验在Android开发中不可能是停滞不前的,需要不断的学习及总结,否则难以解公关技术问题,下面把我压箱底的视频资料贡献给大家; 一,android视频教程 Android视频教程: 1,Android入门
Android开发,干货
内存检测 leakcanary https://github.com/square/leakcanary 响应式编程 RxJava https://github.com/ReactiveX/RxJava RxAndroid https://github.com/ReactiveX/RxAndroid 消息通信 EventBus 组
一文彻底弄懂RxJava
RxJava 到底是什么 一个词:异步。 RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and eventbased programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成
Android 自学必备网站
一,Android 自学网站给 Android 自学者朋友推荐几个自学网站:1. Android Developers作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会。网站:https://developer.android.com/2. Android专业中文社区Android专业
Deno GitHub Action 源码解析
GitHub Action 是 GitHub 官方的 CI/CD 工具,相较于 Travis CI 和 Circle CI,更轻量和易于扩展, 中有大量社区贡献的插件。各大开源项目都纷纷转向使用 GitHub Action 作为持续集成的工具,比如本文的主角 Deno。GitHub 的文档中有很多概念写的十分晦涩,有些翻译很僵硬影响理解。截止发稿时,Deno
非常实用的GitHub项目
CoilCoil是Android上的一个全新的图片加载框架,它的全名叫做 coroutine image loader,即协程图片加载库。与传统的图片加载库Glide,Picasso或Fresco等相比。该具有轻量(只有大约1500个方法)、快、易于使用、更现代的API等优势。它支持GIF和SVG,并且可以执行四个默认转换:模糊,圆形裁剪,灰度和圆角。示例如
Android Binder原理(二)ServiceManager中的Binder机制
Binder原理 Android框架层本文首发于微信公众号「刘望舒」<more 前言在上一篇文章中,我们了解了学习Binder前必须要了解的知识点,其中有一点就是Binder机制的三个部分:Java Binder、Native Binder、Kernel Binder,其中Java Binder和Native
Android深入理解JNI(一)JNI原理与静态、动态注册
Android框架层 Android深入理解JNI Android框架层本文首发于微信公众号「刘望舒」 前言JNI不仅仅在NDK开发中应用,它更是Android系统中Java与Native交互的桥梁,不理解JNI的话,你就只能停留在Java Framework层。这一个系列我们来一起深入学习JNI。<!more 1.JNI概述Android系统按语言来划分的
低开销获取时间戳
前言在前面文章中提了一句关于时间戳获取性能的问题 获取操作系统时间,在Java中直接调用 System.currentTimeMillis(); 就可以,但在Cobar中如果这么获取时间,就会导致性能损耗非常严重(怎么解决?去Cobar的github仓库上看看代码吧)。这个话题展开具体说说,我们在Java中获取时间戳的方法是System.currentTim
Android Binder原理(六)Java Binder的初始化
Binder原理 Android框架层本文首发于微信公众号「刘望舒」<!more 前言在这篇文章中,我根据Android系统的分层,将Binder机制分为了三层:1. Java Binder (对应Framework层的Binder)2. Native Binder(对应Native层的Binder)3. Kernel Binder(对应Kernel层的Bi
Android Binder原理(七)Java Binder中系统服务的注册过程
Binder原理 Android框架层本文首发于微信公众号「后厂技术官」<!more 前言在这篇文章中,我介绍的是Native Binder中的系统服务的注册过程,这一过程的核心是ServiceManager,而在Java Binder中,也有一个ServiceManager,只不过这个ServiceManager是Java文件。既然要将系统服务注册到Ser
cpu分析利器 — async-profiler
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 简介asyncprofiler是一款采集分析java性能的工具,翻译一下github上的项目介绍:asyncprofiler是一款没有Safepoint bias problem的低开销java采集分析器,它利用HotSpot特殊的api来收集栈信息以及
JAVA回调机制(CallBack)之小红是怎样买到房子的??
JAVA回调机制CallBack 序言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按
全靠这份Android知识点PDF大全,月薪30K
第一阶段:Android 基础知识回顾: 回顾Android 开发编程,深入理解Android系统原理和层次结构,深入分析Handler源码和原理; 回顾Java,C/C++,Kotlin、dart 在Android开发中必用的语言,熟悉一下几种语言混淆后的特性; 回顾Android IPC和JNI的底层原理和热更新技术回顾Native开发要点,使用C++结