Android开源介绍-UI组件
終端的開(kāi)發(fā),UI的重要性不言而喻,如何快速開(kāi)發(fā)出優(yōu)雅漂亮的UI,android的一些開(kāi)源UI組件,提供了很好的參考。
參考:
oschina Android UI組件?
最火的Android開(kāi)源項(xiàng)目(一)
最火的Android開(kāi)源項(xiàng)目(二)
最火的Android開(kāi)源項(xiàng)目(完結(jié)篇)
1.?ActionBarSherlock
在3.0之前使用ActionBar,ActionBarSherlock提供了很好的兼容。ActionBarSherlock 是Android compatibility library 的一個(gè)擴(kuò)展,ActionBarSherlock 被設(shè)計(jì)成通過(guò)一個(gè)API就能夠很方便使用所有版本的Android操作欄的設(shè)計(jì)模式.
對(duì)于Android 4.0及更高版本,ActionBarSherlock可以自動(dòng)使用本地ActionBar實(shí)現(xiàn),而對(duì)于之前沒(méi)有ActionBar功能的版本,基于Ice Cream Sandwich的自定義動(dòng)作欄實(shí)現(xiàn)將自動(dòng)圍繞布局。能夠讓開(kāi)發(fā)者輕松開(kāi)發(fā)一款帶動(dòng)作欄(Action bar)的應(yīng)用,并且適用于Android 2.x及其以上所有版本。
這個(gè)是Android牛人開(kāi)發(fā)的一個(gè)開(kāi)源組件,關(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的杰作,說(shuō)過(guò)了關(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)了類(lèi)似于迷尚android和蘑菇街android的瀑布流布局。
不過(guò)作者已經(jīng)聲明:
此項(xiàng)目由于最初設(shè)計(jì)問(wèn)題,導(dǎo)致現(xiàn)在問(wèn)題比較多,暫時(shí)停止維護(hù)。我現(xiàn)在在其他類(lèi)似的瀑布流上進(jìn)行完善開(kāi)發(fā),請(qǐng)關(guān)注:PinterestLikeAdapterView
dodolagithub.com/dodola/…看來(lái)作者還是很用心的,值得關(guān)注。
5.?android-bootstrap
bootstrap,twitter開(kāi)源的一個(gè)項(xiàng)目也叫這個(gè)。怎么看該項(xiàng)目都是一個(gè)聚合
android-bootstrap 是一個(gè)模板/引導(dǎo)/樣板文件的應(yīng)用程序,包括大量的優(yōu)秀的開(kāi)放源碼工具和框架
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è)開(kāi)源的Android庫(kù),能夠讓開(kāi)發(fā)者輕松開(kāi)發(fā)一款應(yīng)用,實(shí)現(xiàn)類(lèi)似于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)建菜單的工具,因此,開(kāi)發(fā)者可以自由創(chuàng)建內(nèi)部菜單。
這個(gè)與SlidingMenu結(jié)合,那豈不是天衣無(wú)縫了。
8.?android-flip
能夠?qū)崿F(xiàn)Flipboard翻頁(yè)效果的UI組件
?
是不是很酷啊
9.?drag-sort-listview
DragSortListView(DSLV)是Android ListView的一個(gè)擴(kuò)展,支持拖拽排序和左右滑動(dòng)刪除功能。重寫(xiě)了TouchInterceptor(TI)類(lèi)來(lái)提供更加優(yōu)美的拖拽動(dòng)畫(huà)效果。
?
DSLV主要特性:
-完美的拖拽支持;
-在拖動(dòng)時(shí)提供更平滑的滾動(dòng)列表滾動(dòng);
-支持每個(gè)ListItem高度的多樣性
-公開(kāi)startDrag()和stopDrag()方法;
-有公開(kāi)的接口可以自定義拖動(dòng)的View。
DragSortListView適用于帶有任何優(yōu)先級(jí)的列表:收藏夾、播放列表及清單等,算得上是目前Android開(kāi)源實(shí)現(xiàn)拖動(dòng)排序操作最完美的方案。
10.?Android-satellite-menu
模擬path的按鈕效果
對(duì)于Satellite Menu,其項(xiàng)目發(fā)起人siyamed表示,這種菜單結(jié)構(gòu)就像是一個(gè)星球四周?chē)@著許多衛(wèi)星,而這也就是他為何會(huì)以Satellite Menu命名該項(xiàng)目的原因。
11.?ArcMenu
又見(jiàn)path的按鈕效果
?對(duì)于這個(gè)項(xiàng)目,其發(fā)起人daCapricorn表示,iOS版Path 2.0上的用戶(hù)體驗(yàn)非常奇妙,但其Android版本卻差太多。因此,他就嘗試著在Android上做出像iOS版本那樣的效果,而事實(shí)也的確如此。
12.?ImageFilterForAndroid
在開(kāi)源ImageFilterForAndroid中擁有許多豐富的圖片效果,是由來(lái)自國(guó)內(nèi)的代震軍發(fā)起的一個(gè)開(kāi)源項(xiàng)目。除了Android平臺(tái),還有Windows Phone和iOS移動(dòng)平臺(tái),三個(gè)平臺(tái)源碼同步。
代震軍也搞Android了嗎,以前還看過(guò)他對(duì)Mongodb源碼的分析。
13.?Crouton
Crouton是Android上的一個(gè)可以讓開(kāi)發(fā)者對(duì)環(huán)境中的Toast進(jìn)行替換的類(lèi),以一個(gè)應(yīng)用程序窗口的方式顯示,而其顯示位置則由開(kāi)發(fā)者自己決定。
以后自定義Toast,就很方便了。
14.?Android-SlideExpandableListView
如果你對(duì)Android提供的Android ExpandableListView并不滿(mǎn)意,一心想要實(shí)現(xiàn)諸如Spotify應(yīng)用那般的效果,那么SlideExpandableListView絕對(duì)是你最好的選擇。
該庫(kù)允許你自定義每個(gè)列表項(xiàng)目中的ListView,一旦用戶(hù)點(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 的切換,并沒(méi)有讓舊的平臺(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 還沒(méi)實(shí)現(xiàn)外,其他我知道的特性都已經(jīng)移植完畢。效果可以看主頁(yè)的截圖。
如果你之前有使用NotificationCompat.Builder的,你只需把com.android.support.v4.app.NotificationCompat.Builder替換成com.android.support.v8.app.NotificationCompat.Builder 即可。
總結(jié)
以上是生活随笔為你收集整理的Android开源介绍-UI组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android中一些能在国外使用的第三方
- 下一篇: android sina oauth2.