Android开源介绍-UI组件
終端的開發(fā),UI的重要性不言而喻,如何快速開發(fā)出優(yōu)雅漂亮的UI,android的一些開源UI組件,提供了很好的參考。
參考:
oschina Android UI組件?
最火的Android開源項(xiàng)目(一)
最火的Android開源項(xiàng)目(二)
最火的Android開源項(xiàng)目(完結(jié)篇)
1.?ActionBarSherlock
在3.0之前使用ActionBar,ActionBarSherlock提供了很好的兼容。ActionBarSherlock 是Android compatibility library 的一個(gè)擴(kuò)展,ActionBarSherlock 被設(shè)計(jì)成通過一個(gè)API就能夠很方便使用所有版本的Android操作欄的設(shè)計(jì)模式.
對(duì)于Android 4.0及更高版本,ActionBarSherlock可以自動(dòng)使用本地ActionBar實(shí)現(xiàn),而對(duì)于之前沒有ActionBar功能的版本,基于Ice Cream Sandwich的自定義動(dòng)作欄實(shí)現(xiàn)將自動(dòng)圍繞布局。能夠讓開發(fā)者輕松開發(fā)一款帶動(dòng)作欄(Action bar)的應(yīng)用,并且適用于Android 2.x及其以上所有版本。
這個(gè)是Android牛人開發(fā)的一個(gè)開源組件,關(guān)注 JakeWharton ,你會(huì)有更多驚喜。
| 12345678910111213141516171819202122232425262728 | <div class="line" id="file-okhttpstack-java-LC1" style="margin: 0px; padding: 0px;"><span class="kn" style="margin: 0px; padding: 0px;">import</span> <span class="nn" style="margin: 0px; padding: 0px; color: rgb(85, 85, 85);">com.android.volley.toolbox.HurlStack</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">;</span></div><div class="line" id="file-okhttpstack-java-LC2" style="margin: 0px; padding: 0px;"><span class="kn" style="margin: 0px; padding: 0px;">import</span> <span class="nn" style="margin: 0px; padding: 0px; color: rgb(85, 85, 85);">com.squareup.okhttp.OkHttpClient</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">;</span></div><div class="line" id="file-okhttpstack-java-LC3" style="margin: 0px; padding: 0px;"><span class="kn" style="margin: 0px; padding: 0px;">import</span> <span class="nn" style="margin: 0px; padding: 0px; color: rgb(85, 85, 85);">java.io.IOException</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">;</span></div><div class="line" id="file-okhttpstack-java-LC4" style="margin: 0px; padding: 0px;"><span class="kn" style="margin: 0px; padding: 0px;">import</span> <span class="nn" style="margin: 0px; padding: 0px; color: rgb(85, 85, 85);">java.net.HttpURLConnection</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">;</span></div><div class="line" id="file-okhttpstack-java-LC5" style="margin: 0px; padding: 0px;"><span class="kn" style="margin: 0px; padding: 0px;">import</span> <span class="nn" style="margin: 0px; padding: 0px; color: rgb(85, 85, 85);">java.net.URL</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">;</span></div><div class="line" id="file-okhttpstack-java-LC6" style="margin: 0px; padding: 0px;">?</div><div class="line" id="file-okhttpstack-java-LC7" style="margin: 0px; padding: 0px;"><span class="cm" style="margin: 0px; padding: 0px; color: rgb(153, 153, 136); font-style: italic;">/**</span></div><div class="line" id="file-okhttpstack-java-LC8" style="margin: 0px; padding: 0px;"><span class="cm" style="margin: 0px; padding: 0px; color: rgb(153, 153, 136); font-style: italic;"> * An {@link com.android.volley.toolbox.HttpStack HttpStack} implementation which</span></div><div class="line" id="file-okhttpstack-java-LC9" style="margin: 0px; padding: 0px;"><span class="cm" style="margin: 0px; padding: 0px; color: rgb(153, 153, 136); font-style: italic;"> * uses OkHttp as its transport.</span></div><div class="line" id="file-okhttpstack-java-LC10" style="margin: 0px; padding: 0px;"><span class="cm" style="margin: 0px; padding: 0px; color: rgb(153, 153, 136); font-style: italic;"> */</span></div><div class="line" id="file-okhttpstack-java-LC11" style="margin: 0px; padding: 0px;"><span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">public</span> <span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">class</span> <span class="nc" style="margin: 0px; padding: 0px; color: rgb(68, 85, 136); font-weight: bold;">OkHttpStack</span> <span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">extends</span> <span class="n" style="margin: 0px; padding: 0px;">HurlStack</span> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">{</span></div><div class="line" id="file-okhttpstack-java-LC12" style="margin: 0px; padding: 0px;"> <span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">private</span> <span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">final</span> <span class="n" style="margin: 0px; padding: 0px;">OkHttpClient</span> <span class="n" style="margin: 0px; padding: 0px;">client</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">;</span></div><div class="line" id="file-okhttpstack-java-LC13" style="margin: 0px; padding: 0px;">?</div><div class="line" id="file-okhttpstack-java-LC14" style="margin: 0px; padding: 0px;"> <span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">public</span> <span class="nf" style="margin: 0px; padding: 0px; color: rgb(153, 0, 0); font-weight: bold;">OkHttpStack</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">()</span> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">{</span></div><div class="line" id="file-okhttpstack-java-LC15" style="margin: 0px; padding: 0px;"> <span class="k" style="margin: 0px; padding: 0px; font-weight: bold;">this</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">(</span><span class="k" style="margin: 0px; padding: 0px; font-weight: bold;">new</span> <span class="n" style="margin: 0px; padding: 0px;">OkHttpClient</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">());</span></div><div class="line" id="file-okhttpstack-java-LC16" style="margin: 0px; padding: 0px;"> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">}</span></div><div class="line" id="file-okhttpstack-java-LC17" style="margin: 0px; padding: 0px;">?</div><div class="line" id="file-okhttpstack-java-LC18" style="margin: 0px; padding: 0px;"> <span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">public</span> <span class="nf" style="margin: 0px; padding: 0px; color: rgb(153, 0, 0); font-weight: bold;">OkHttpStack</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">(</span><span class="n" style="margin: 0px; padding: 0px;">OkHttpClient</span> <span class="n" style="margin: 0px; padding: 0px;">client</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">)</span> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">{</span></div><div class="line" id="file-okhttpstack-java-LC19" style="margin: 0px; padding: 0px;"> <span class="k" style="margin: 0px; padding: 0px; font-weight: bold;">if</span> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">(</span><span class="n" style="margin: 0px; padding: 0px;">client</span> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">==</span> <span class="kc" style="margin: 0px; padding: 0px; font-weight: bold;">null</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">)</span> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">{</span></div><div class="line" id="file-okhttpstack-java-LC20" style="margin: 0px; padding: 0px;"> <span class="k" style="margin: 0px; padding: 0px; font-weight: bold;">throw</span> <span class="k" style="margin: 0px; padding: 0px; font-weight: bold;">new</span> <span class="nf" style="margin: 0px; padding: 0px; color: rgb(153, 0, 0); font-weight: bold;">NullPointerException</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">(</span><span class="s" style="margin: 0px; padding: 0px; color: rgb(221, 17, 68);">"Client must not be null."</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">);</span></div><div class="line" id="file-okhttpstack-java-LC21" style="margin: 0px; padding: 0px;"> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">}</span></div><div class="line" id="file-okhttpstack-java-LC22" style="margin: 0px; padding: 0px;"> <span class="k" style="margin: 0px; padding: 0px; font-weight: bold;">this</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">.</span><span class="na" style="margin: 0px; padding: 0px; color: teal;">client</span> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">=</span> <span class="n" style="margin: 0px; padding: 0px;">client</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">;</span></div><div class="line" id="file-okhttpstack-java-LC23" style="margin: 0px; padding: 0px;"> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">}</span></div><div class="line" id="file-okhttpstack-java-LC24" style="margin: 0px; padding: 0px;">?</div><div class="line" id="file-okhttpstack-java-LC25" style="margin: 0px; padding: 0px;"> <span class="nd" style="margin: 0px; padding: 0px;">@Override</span> <span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">protected</span> <span class="n" style="margin: 0px; padding: 0px;">HttpURLConnection</span> <span class="n" style="margin: 0px; padding: 0px;">createConnection</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">(</span><span class="n" style="margin: 0px; padding: 0px;">URL</span> <span class="n" style="margin: 0px; padding: 0px;">url</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">)</span> <span class="kd" style="margin: 0px; padding: 0px; font-weight: bold;">throws</span> <span class="n" style="margin: 0px; padding: 0px;">IOException</span> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">{</span></div><div class="line" id="file-okhttpstack-java-LC26" style="margin: 0px; padding: 0px;"> <span class="k" style="margin: 0px; padding: 0px; font-weight: bold;">return</span> <span class="n" style="margin: 0px; padding: 0px;">client</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">.</span><span class="na" style="margin: 0px; padding: 0px; color: teal;">open</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">(</span><span class="n" style="margin: 0px; padding: 0px;">url</span><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">);</span></div><div class="line" id="file-okhttpstack-java-LC27" style="margin: 0px; padding: 0px;"> <span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">}</span> </div><div class="line" id="file-okhttpstack-java-LC28" style="margin: 0px; padding: 0px;"><span class="o" style="margin: 0px; padding: 0px; font-weight: bold;">}</span></div> |
2.?Android-ViewPagerIndicator
這個(gè)又是JakeWharton的杰作,說過了關(guān)注他,會(huì)有驚喜。
ViewPagerIndicator是擴(kuò)展了support庫(kù)中ViewPager的用法。
Paging indicator widgets compatible with the ViewPager from the Android Support Library and ActionBarSherlock. Originally based on Patrik ?kerfeldt's ViewFlow
3.?Android PullToRefresh
該項(xiàng)目為 Android 應(yīng)用提供一個(gè)向下滑動(dòng)即刷新列表的功能。這個(gè)很常用,現(xiàn)在的列表中,都提供了向下滑動(dòng)刷新的功能。
4.?Android瀑布流
實(shí)現(xiàn)了類似于迷尚android和蘑菇街android的瀑布流布局。
不過作者已經(jīng)聲明:
此項(xiàng)目由于最初設(shè)計(jì)問題,導(dǎo)致現(xiàn)在問題比較多,暫時(shí)停止維護(hù)。我現(xiàn)在在其他類似的瀑布流上進(jìn)行完善開發(fā),請(qǐng)關(guān)注:PinterestLikeAdapterView
dodolagithub.com/dodola/…看來作者還是很用心的,值得關(guān)注。
5.?android-bootstrap
bootstrap,twitter開源的一個(gè)項(xiàng)目也叫這個(gè)。怎么看該項(xiàng)目都是一個(gè)聚合
android-bootstrap 是一個(gè)模板/引導(dǎo)/樣板文件的應(yīng)用程序,包括大量的優(yōu)秀的開放源碼工具和框架
Android Bootstrap 包含一個(gè)完整實(shí)現(xiàn):Fragments, Fragment Pager, Account Manager, android-maven-plugin, Dagger, ActionBarSherlock 4, ViewPagerIndicator, http-request, GSON, Robotium for integration testing, API Consumption with an API on Parse.com and much more.
好東西啊,什么都有了,同學(xué)們自己挑選吧。
6.?SlidingMenu
SlidingMenu是一個(gè)開源的Android庫(kù),能夠讓開發(fā)者輕松開發(fā)一款應(yīng)用,實(shí)現(xiàn)類似于Google+、Youtube和Facebook應(yīng)用中非常流行的滑動(dòng)式菜單。
目前使用該項(xiàng)目的應(yīng)用:
- Foursquare?
- Rdio
- Evernote Food
- Plume
- VLC for Android
- ESPN ScoreCenter
- MLS MatchDay
- 9GAG
- Wunderlist 2
- The Verge
- MTG Familiar
- Mantano Reader
- Falcon Pro (BETA)
- MW3 Barracks
7.?AndroidSideMenu
AndroidSideMenu能夠讓你輕而易舉地創(chuàng)建側(cè)滑菜單。需要注意的是,該項(xiàng)目自身并不提供任何創(chuàng)建菜單的工具,因此,開發(fā)者可以自由創(chuàng)建內(nèi)部菜單。
這個(gè)與SlidingMenu結(jié)合,那豈不是天衣無縫了。
8.?android-flip
能夠?qū)崿F(xiàn)Flipboard翻頁效果的UI組件
?
是不是很酷啊
9.?drag-sort-listview
DragSortListView(DSLV)是Android ListView的一個(gè)擴(kuò)展,支持拖拽排序和左右滑動(dòng)刪除功能。重寫了TouchInterceptor(TI)類來提供更加優(yōu)美的拖拽動(dòng)畫效果。
?
DSLV主要特性:
-完美的拖拽支持;
-在拖動(dòng)時(shí)提供更平滑的滾動(dòng)列表滾動(dòng);
-支持每個(gè)ListItem高度的多樣性
-公開startDrag()和stopDrag()方法;
-有公開的接口可以自定義拖動(dòng)的View。
DragSortListView適用于帶有任何優(yōu)先級(jí)的列表:收藏夾、播放列表及清單等,算得上是目前Android開源實(shí)現(xiàn)拖動(dòng)排序操作最完美的方案。
10.?Android-satellite-menu
模擬path的按鈕效果
對(duì)于Satellite Menu,其項(xiàng)目發(fā)起人siyamed表示,這種菜單結(jié)構(gòu)就像是一個(gè)星球四周圍繞著許多衛(wèi)星,而這也就是他為何會(huì)以Satellite Menu命名該項(xiàng)目的原因。
11.?ArcMenu
又見path的按鈕效果
?對(duì)于這個(gè)項(xiàng)目,其發(fā)起人daCapricorn表示,iOS版Path 2.0上的用戶體驗(yàn)非常奇妙,但其Android版本卻差太多。因此,他就嘗試著在Android上做出像iOS版本那樣的效果,而事實(shí)也的確如此。
12.?ImageFilterForAndroid
在開源ImageFilterForAndroid中擁有許多豐富的圖片效果,是由來自國(guó)內(nèi)的代震軍發(fā)起的一個(gè)開源項(xiàng)目。除了Android平臺(tái),還有Windows Phone和iOS移動(dòng)平臺(tái),三個(gè)平臺(tái)源碼同步。
代震軍也搞Android了嗎,以前還看過他對(duì)Mongodb源碼的分析。
13.?Crouton
Crouton是Android上的一個(gè)可以讓開發(fā)者對(duì)環(huán)境中的Toast進(jìn)行替換的類,以一個(gè)應(yīng)用程序窗口的方式顯示,而其顯示位置則由開發(fā)者自己決定。
以后自定義Toast,就很方便了。
14.?Android-SlideExpandableListView
如果你對(duì)Android提供的Android ExpandableListView并不滿意,一心想要實(shí)現(xiàn)諸如Spotify應(yīng)用那般的效果,那么SlideExpandableListView絕對(duì)是你最好的選擇。
該庫(kù)允許你自定義每個(gè)列表項(xiàng)目中的ListView,一旦用戶點(diǎn)擊某個(gè)按鈕,即可實(shí)現(xiàn)該列表項(xiàng)目區(qū)域滑動(dòng)。
15.?TimesSquare
Android下一款漂亮的日歷控件?
16.?StandOut
StandOut 可讓你輕松創(chuàng)建 Android 的浮動(dòng)窗口?
17.?Notifications4EveryWhere
基于android 4.1 Notification 樣式實(shí)現(xiàn)的兼容包。
改進(jìn)自源com.android.support.v4.app 里面的NotificationCompat.Builder。
由于原官方的兼容包中,只是對(duì)Notification 做了一層api 的切換,并沒有讓舊的平臺(tái)實(shí)現(xiàn)android 4.1 Notification 的新特性。所以,我對(duì)照著android4.1的源碼把,android 4.1 的部分新的Notification 的特性進(jìn)行移植,讓android 2.2 以上的平臺(tái)都能夠用一致的api 實(shí)現(xiàn)同樣的效果。
目前除了android 4.1 的bigStyle 還沒實(shí)現(xiàn)外,其他我知道的特性都已經(jīng)移植完畢。效果可以看主頁的截圖。
如果你之前有使用NotificationCompat.Builder的,你只需把com.android.support.v4.app.NotificationCompat.Builder替換成com.android.support.v8.app.NotificationCompat.Builder 即可。
總結(jié)
以上是生活随笔為你收集整理的Android开源介绍-UI组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android中一些能在国外使用的第三方
- 下一篇: Android Socket编程(多线