2020年GitHub 上那些优秀Android开源库,这里是Top10!

原文作者:依然范特稀西

前言

2020年有哪些优秀的开源库呢?本期就为大家带精选的10个,排名不分先后。

No1. LiquidSwipe

这是一个很棒的ViewPager库,它在浏览ViewPager的不同页面时,显示波浪的滑动动画,效果非常炫酷。该库的USP是触摸交互的。这意味着在视图中显示类似液体的显示过渡时,应考虑触摸事件。

1.1如何使用呢?

导入以下Gradle依赖项:

implementation 'com.github.Chrisvin:LiquidSwipe:1.3'

然后将LiquidSwipeLayout添加为保存fragment布局的容器的根布局:

<androidx.constraintlayout.widget.ConstraintLayout     
 xmlns:android="http://schemas.android.com/apk/res/android"   
 android:layout_width="match_parent"   
 android:layout_height="match_parent">    

<com.jem.liquidswipe.LiquidSwipeViewPager        
android:id="@+id/viewpager"        
android:layout_width="match_parent"        
android:layout_height="match_parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

1.2 效果图
效果1 效果2

更多详细使用方法请看Github: github.com/Chrisvin/Li…

No2. Flourish

Flourish提供了一个炫酷的方式来显示或者隐藏一个布局,实现方式也很简单,就是对View或者布局进行了包装,通过构建者模式来提供api给上层调用。就像使用dialog一样,调用showdissmiss方法来显示和隐藏。此外,通过这些类,我们还可以自定义动画(正常,加速,反弹),或为布局方向设置我们自己的起点(左上,右下等)。

2.1 如何使用?

在build.gradle 中添加如下依赖:

dependencies {   
 implementation "com.github.skydoves:flourish:1.0.0"
}

然后在代码中,构建布局:

Flourish flourish = new Flourish.Builder(parentLayout)   
      // sets the flourish layout for showing and dismissing on the parent layout.   
     .setFlourishLayout(R.layout.layout_flourish_main)   
     // sets the flourishing animation for showing and dismissing.    
    .setFlourishAnimation(FlourishAnimation.BOUNCE)    
     // sets the orientation of the starting point.   
    .setFlourishOrientation(FlourishOrientation.TOP_LEFT)   
     // sets a flourishListener for listening changes.    
    .setFlourishListener(flourishListener)    
     // sets the flourish layout should be showed on start.    
    .setIsShowedOnStart(false)   
     // sets the duration of the flourishing.    
    .setDuration(800L)   
    .build();

还提供有更简介的DSL:

val myFlourish = createFlourish(parentLayout) { 
   setFlourishLayout(R.layout.layout_flourish_main)  
   setFlourishAnimation(FlourishAnimation.ACCELERATE)  
   setFlourishOrientation(FlourishOrientation.TOP_RIGHT)  
   setIsShowedOnStart(true)  
   setFlourishListener {  }
}
2.2 效果图
效果1 效果2

更多详细使用请看Github:github.com/skydoves/Fl…

No3. AestheticDialogs

这是一个美观而时尚的AlterDialog库,目前可支持六种不同的对话框,如:

  • Flash Dialog
  • Connectify Dialog
  • Toaster Dialog
  • Emotion Dialog
  • Drake Dialog
  • Emoji Dialog 并且啊,还提供了暗黑模式的适配。
3.1 如何使用?

build.gradle 中添加如下依赖:

dependencies { 
...
 implementation 'com.github.gabriel-TheCode:AestheticDialogs:1.1.0'
}

代码中,显示不同种类的对话框则调用对应的方法就好

Flash:

AestheticDialog.showFlashDialog(this, "Your dialog Title", "Your message", AestheticDialog.SUCCESS);
AestheticDialog.showFlashDialog(this, "Your dialog Title", "Your message", AestheticDialog.ERROR);

Connectify:

 AestheticDialog.showConnectify(this,"Your message", AestheticDialog.SUCCESS);
 AestheticDialog.showConnectify(this, "Your message", AestheticDialog.ERROR); 

/// Dark Theme 
 AestheticDialog.showConnectifyDark(this,"Your message",AestheticDialog.SUCCESS);
 AestheticDialog.showConnectifyDark(this, "Your message", AestheticDialog.ERROR);

Toaster:

 AestheticDialog.showToaster(this, "Your dialog Title", "Your message", AestheticDialog.ERROR);
 AestheticDialog.showToaster(this, "Your dialog Title", "Your message", AestheticDialog.SUCCESS);
 AestheticDialog.showToaster(this, "Your dialog Title", "Your message", AestheticDialog.WARNING); 
 AestheticDialog.showToaster(this, "Your dialog Title", "Your message", AestheticDialog.INFO); 

 /// Dark Theme 
 AestheticDialog.showToasterDark(this, "Your dialog Title", "Your message", AestheticDialog.ERROR);
 AestheticDialog.showToasterDark(this, "Your dialog Title", "Your message", AestheticDialog.SUCCESS);
 AestheticDialog.showToasterDark(this, "Your dialog Title", "Your message", AestheticDialog.WARNING);
 AestheticDialog.showToasterDark(this, "Your dialog Title", "Your message", AestheticDialog.INFO);

Drake :

 AestheticDialog.showDrake(this, AestheticDialog.SUCCESS);
 AestheticDialog.showDrake(this, AestheticDialog.ERROR);

Emoji :

 AestheticDialog.showEmoji(this,"Your dialog Title", "Your message", AestheticDialog.SUCCESS);
 AestheticDialog.showEmoji(this, "Your dialog Title", "Your message", AestheticDialog.ERROR);

/// Dark Theme 
 AestheticDialog.showEmojiDark(this,"Your dialog Title", "Your message", AestheticDialog.SUCCESS);
 AestheticDialog.showEmojiDark(this, "Your dialog Title", "Your message", AestheticDialog.ERROR);

Emotion :

 AestheticDialog.showEmotion(this,"Your dialog Title", "Your message", AestheticDialog.SUCCESS);
 AestheticDialog.showEmotion(this, "Your dialog Title", "Your message", AestheticDialog.ERROR);

Rainbow :

 AestheticDialog.showRainbow(this,"Your dialog Title", "Your message", AestheticDialog.SUCCESS);
 AestheticDialog.showRainbow(this,"Your dialog Title", "Your message", AestheticDialog.ERROR); 
 AestheticDialog.showRainbow(this,"Your dialog Title", "Your message", AestheticDialog.WARNING);
 AestheticDialog.showRainbow(this,"Your dialog Title", "Your message", AestheticDialog.INFO);
3.2 效果如下
Flash Dialog Connectify Dialog Toaster Dialog
Emotion Dialog Drake Dialog Emoji Dialog

更多详情使用方法请看Github:github.com/gabriel-The…

N4. EasyReveal

从名字就知道,这是一个提供reveal动画效果的库,它的厉害之处在于可以提供不同尺寸、不同形状的reveal动画,并且还可以在定义它在屏幕任意位置开始和结束动画。

4.1 如何使用?

build.gradle 中添加如下依赖:

dependencies {
 ...
 implementation 'com.github.Chrisvin:EasyReveal:1.2'
}

然后,xml中,需要添加显示或者隐藏动画的View应该包裹在EasyRevealLinearLayout中:

<com.jem.easyreveal.layouts.EasyRevealLinearLayout   
 ...    
app:clipPathProvider="star" // possible values: circular, linear, random_line, star, sweep & wave    
app:revealAnimationDuration="2000"    
app:hideAnimationDuration="1500" >    

<!-- The views to be revealed/hidden go here -->

</com.jem.easyreveal.layouts.EasyRevealLinearLayout>
<!-- Similarly for com.jem.easyreveal.layouts.EasyRevealConstraintLayout & com.jem.easyreveal.layouts.EasyRevealFrameLayout -->

也可以在代码中添加:

val revealLayout = EasyRevealLinearLayout(this)
// Set the ClipPathProvider that is used to clip the view for reveal animation
revealLayout.clipPathProvider = StarClipPathProvider(numberOfPoints = 6)
// Set the duration taken for reveal animation
revealLayout.revealAnimationDuration = 1500
// Set the duration taken for hide animation
revealLayout.hideAnimationDuration = 2000
// Set listener to get updates during reveal/hide animation
revealLayout.onUpdateListener = object: RevealLayout.OnUpdateListener {    
     override fun onUpdate(percent: Float) {        
        Toast.makeText(this@MainActivity, "Revealed percent: $percent", Toast.LENGTH_SHORT).show()   
   }
}
// Start reveal animation
revealLayout.reveal()
// Start hide animation
revealLayout.hide()
4.2效果图
Emotion Dialog Drake Dialog Emoji Dialog

更多详细使用信息请看Github: github.com/Chrisvin/Ea…

No5. Android ColorX

Android ColorX 以Kotlin 扩展函数的形式提供了一些重要的获取颜色的方法。 通过提供不同颜色格式(RGB,HSV,CYMK等)的转换功能,它使开发变得更加轻松。该库的USP具有以下功能:

  • 颜色的不同阴影和色调。
  • 较深和较浅的阴影。
  • 颜色的补码
5.1 如何使用?

build.gradle 中添加如下依赖:

dependencies {    
implementation 'me.jorgecastillo:androidcolorx:0.2.0'
}

在代码中,一系列的转换方法:

val color = Color.parseColor("#e91e63")

val rgb = color.asRgb()
val argb = color.asArgb()
val hex = color.asHex()
val hsl = color.asHsl()
val hsla = color.asHsla()
val hsv = color.asHsv()
val cmyk = color.asCmyk()

val colorHsl = HSLColor(hue = 210f, saturation = 0.5f, lightness = 0.5f)

val colorInt = colorHsl.asColorInt()
val rgb = colorHsl.asRgb()
val argb = colorHsl.asArgb()
val hex = colorHsl.asHex()
val cmyk = colorHsl.asCmyk()
val hsla = colorHsl.asHsla()
val hsv = colorHsl.asHsv()
5.2 效果图

更多详细使用信息请看Github:github.com/JorgeCastil…

No6. AnimatedBottomBar

这是一个带动画的底部导航栏库。它使你可以以编程方式以及通过XML添加和删除选项卡。此外,我们可以轻松地从BottomBar拦截选项卡。限制访问应用程序导航中的高级区域时,“拦截”标签非常有用。流畅的动画提供了许多自定义选项,从动画插值器到设置波纹效果。

6.1 如何使用?

build.gradle 中添加如下依赖:

 dependencies { 
 implementation 'nl.joery.animatedbottombar:library:1.0.8'
 }

在xml文件中添加AnimatedBottomBar和自定义属性

<nl.joery.animatedbottombar.AnimatedBottomBar    
     android:id="@+id/bottom_bar"    
     android:background="#FFF"    
     android:layout_width="match_parent"    
     android:layout_height="wrap_content"   
     app:abb_selectedTabType="text"    
     app:abb_indicatorAppearance="round"    
     app:abb_indicatorMargin="16dp"    
     app:abb_indicatorHeight="4dp"    
     app:abb_tabs="@menu/tabs"    
     app:abb_selectedIndex="1" />

res/menu目录下定义tabs.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android">   
         <item       
             android:id="@+id/tab_home"        
             android:icon="@drawable/home"        
             android:title="@string/home" />    
        <item        
             android:id="@+id/tab_alarm"        
             android:icon="@drawable/alarm"        
             android:title="@string/alarm" />    
        <item        
             android:id="@+id/tab_bread"        
             android:icon="@drawable/bread"        
             android:title="@string/bread" />    
        <item        
             android:id="@+id/tab_cart"        
             android:icon="@drawable/cart"        
             android:title="@string/cart" />
</menu>

最后,代码中添加tab

// Creating a tab by passing values
val bottomBarTab1 = AnimatedBottomBar.createTab(drawable, "Tab 1")

// Creating a tab by passing resources
val bottomBarTab2 = AnimatedBottomBar.createTab(R.drawable.ic_home, R.string.tab_2, R.id.tab_home)
6.2 效果图
tab1 tab2

详情信息请看Github: github.com/Droppers/An…

No7. RateBottomSheet

有时候,为了推广我们的应用,我们需要让用户跳转到应用商店为我们的APP打分,传统的对话框用户体验很不好,而本库则是用BottomSheet来进行提示,它位于底部缩略区域,用户体验很好。

7.1 如何使用呢?

build.gradle 中添加如下依赖:

dependencies {
implementation 'com.mikhaellopez:ratebottomsheet:1.1.0'
}

然后修改默认的string资源文件来改变显示文案:

<resources>    
<string name="rate_popup_ask_title">Like this App?</string>    
<string name="rate_popup_ask_message">Do you like using this application?</string>    
<string name="rate_popup_ask_ok">Yes I do</string>    
<string name="rate_popup_ask_no">Not really</string>    

<string name="rate_popup_title">Rate this app</string>    
<string name="rate_popup_message">Would you mind taking a moment to rate it? It won\'t take more than a minute. Thanks for your support</string>    
<string name="rate_popup_ok">Rate it now</string>    
<string name="rate_popup_later">Remind me later</string>    
<string name="rate_popup_no">No, thanks</string>
</resources>

代码中使用:

RateBottomSheetManager(this)    
.setInstallDays(1) // 3 by default   
 .setLaunchTimes(2) // 5 by default    
.setRemindInterval(1) // 2 by default    
.setShowAskBottomSheet(false) // True by default    
.setShowLaterButton(false) // True by default    
.setShowCloseButtonIcon(false) // True by default   
.monitor()

// Show bottom sheet if meets conditions
// With AppCompatActivity or FragmentRateBottomSheet.showRateBottomSheetIfMeetsConditions(this)复制代码
7.2 效果图

更多详情请看Github:github.com/lopspower/R…

No8. TransformationLayout

这是一个用于Activity或者Fragment 以及View切换的过渡动画库,效果非常炫,它使用Material Design的运动系统过渡模式来创建变形动画。该库提供了用于绑定目标视图,设置淡入淡出和路径运动方向以及许多其他自定义选项的属性。

8.1 如何使用?

build.gradle 中添加如下依赖:

dependencies{    
implementation "com.github.skydoves:transformationlayout:1.0.4"
}

然后,需要将我们需要添加过渡动画的View包裹到 TransformationLayout:

<com.skydoves.transformationlayout.TransformationLayout  
   android:layout_width="wrap_content"  
   android:layout_height="wrap_content"  
   app:transformation_targetView="@+id/my_cardView" // sets a target view.  
   app:transformation_duration="450" // sets a duration of the transformation.  
   app:transformation_direction="auto" // auto, entering, returning  
   app:transformation_fadeMode="in" // in, out, cross, through  
   app:transformation_fitMode="auto" // auto, height, width  
   app:transformation_pathMode="arc" // arc, linear

>   

<!-- other views -->
</com.skydoves.transformationlayout.TransformationLayout>

比如我们要将一个fab 过渡到一个card卡片,布局如下:

<com.skydoves.transformationlayout.TransformationLayout    
android:id="@+id/transformationLayout"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content"    
app:transformation_duration="550"    
app:transformation_targetView="@+id/myCardView">  

<com.google.android.material.floatingactionbutton.FloatingActionButton      
android:id="@+id/fab"      
android:layout_width="wrap_content"      
android:layout_height="wrap_content"      
android:backgroundTint="@color/colorPrimary"      
android:src="@drawable/ic_write"/>
</com.skydoves.transformationlayout.TransformationLayout>

<com.google.android.material.card.MaterialCardView    
android:id="@+id/myCardView"    
android:layout_width="240dp"    
android:layout_height="312dp"    
android:layout_marginLeft="30dp"    
android:layout_marginTop="30dp"    
app:cardBackgroundColor="@color/colorPrimary" />

重点来了,绑定视图,将一个targetView绑定到TransformationLayout有2种方式:

  • 通过在xml中指定属性:
app:transformation_targetView="@+id/myCardView"
  • 在代码中绑定
transformationLayout.bindTargetView(myCardView)

当我们点击fab时,在监听器中调用startTransform()开始过渡动画,finishTransform()开始结束动画。

// start transformation when touching the fab.
fab.setOnClickListener {  
transformationLayout.startTransform()
}

// finish transformation when touching the myCardView.
myCardView.setOnClickListener {  
transformationLayout.finishTransform()
}
8.2 效果图

更多使用方式请看Github: github.com/skydoves/Tr…

No9. Donut

这个一个可以展示多个数据集的圆弧形控件,具有精细的颗粒控制、间隙功能、动画选项以及按比例缩放其值的功能。可以用于项目中的一些数据统计。

9.1 如何使用?

build.gradle 中添加如下依赖:

dependencies {    
implementation("app.futured.donut:library:$version")
}

然后在布局文件中添加View:

<app.futured.donut.DonutProgressView    
android:id="@+id/donut_view"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content"    
app:donut_bgLineColor="@color/cloud"    
app:donut_gapWidth="20"    
app:donut_gapAngle="270"    
app:donut_strokeWidth="16dp"/>

然后在代码中设置数据:

val dataset1 = DonutDataset(    
name = "dataset_1",    
color = Color.parseColor("#FB1D32"),    
amount = 1f
)

val dataset2 = DonutDataset(
name = "dataset_2",   
color = Color.parseColor("#FFB98E"),    
amount = 1f
)

donut_view.cap = 5f
donut_view.submitData(listOf(dataset1, dataset2))
9.2 效果图

更多用法请看Github: github.com/futuredapp/…

No10. CurveGraphView

CurveGraphView 是一个带有炫酷动画统计图表库,除了性能出色并具有许多样式选项之外,该库还支持单个平面内的多个线图。

多个折线图对于比较不同股票,共同基金,加密货币等的价格非常有用。

10.1 如何使用?

1、在build.gradle 中添加如下依赖:

dependencies {   
 implementation 'com.github.swapnil1104:CurveGraphView:{current_lib_ver}'
}

2、在xml文件中添加布局:

 <com.broooapps.graphview.CurveGraphView        
android:id="@+id/cgv"        
android:layout_width="0dp"        
android:layout_height="250dp"        
app:layout_constraintBottom_toBottomOf="parent"        
app:layout_constraintEnd_toEndOf="parent"        
app:layout_constraintStart_toStartOf="parent"        
app:layout_constraintTop_toTopOf="parent" />

然后在代码中添加各种配置项

curveGraphView = findViewById(R.id.cgv);

curveGraphView.configure(        
new CurveGraphConfig.Builder(this)                
.setAxisColor(R.color.Blue)                                             // Set X and Y axis line color stroke.               
.setIntervalDisplayCount(7)                                             // Set number of values to be displayed in X ax     .setGuidelineCount(2)                                                   // Set number of background guidelines to be shown.                
.setGuidelineColor(R.color.GreenYellow)                                 // Set color of the visible guidelines.              .setNoDataMsg(" No Data ")                                              // Message when no data is provided to the view.setxAxisScaleTextColor(R.color.Black)                                  // Set X axis scale text color.                
.setyAxisScaleTextColor(R.color.Black)                                  // Set Y axis scale text color                
.build()        
););

3、 提供数据集

PointMap pointMap = new PointMap();        
pointMap.addPoint(0, 100);        
pointMap.addPoint(1, 500);        
pointMap.addPoint(5, 800);        
pointMap.addPoint(4, 600);
10.2 效果图
效果1 效果2
image

更多详细使用方式请看Github: github.com/swapnil1104…

总结

以上就是本期的开源库推荐,别忘了添加到你的收藏夹哟!如果你觉得还不错,就三连支持一下吧!如果你还有一些有意思的,效果特别炫酷的库,也欢迎评论区留言推荐,感谢阅读,祝编码愉快!

最后

不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。

对于程序员来说,要学习的知识内容、技术有太多太多。

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,可以关注我,每天更新各种技术干货,分享更多最热程序员圈内事.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342