Android專案架構--知識體系簡單梳理(一)
Android專案結構按模組module來劃分
lib_base:包含各種Base基類,如 BaseActivty、BaseFragment、BaseApplication,這是一些專案的開始基礎。
lib_ui:各種自定義UI或第三方ui 。現在android studio 使用起來非常方便 了,對於第三方的東西都直接在gradle中配置 ,方便更新,jar引入就免了吧。
lib_component:元件庫,如gif 、log
lib_author:第三方認證登入(微信/微博/QQ)
lib_share:第三方分享(QQ/微信/微博)
lib_pay:支付合集(微信/支付寶/銀聯)
lib_utils:各種工具類集合
現在的App基本都要有這些功能:分享、支付、定位、推送、統計、buggly、第三方登入等
基礎知識體系
Java基礎
資料結構
面向物件思想
設計模式
開發環境:Eclipse 、Android Studio
Android SDK
Activity生命週期
Service生命週期
BroadcastReceiver:動態註冊與靜態註冊
ContentProvider
Fragment
ActionBar
Action Bar是一種新増的導航欄功能,在Android 3.0之後加入到系統的API當中,它標識了使用者當前操作介面的位置,並提供了額外的使用者動作、介面導航等功能。
使用ActionBar的好處是,它可以給提供一種全域性統一的UI介面,使得使用者在使用任何一款軟體時都懂得該如何操作,並且ActionBar還可以自動適應各種不同大小的螢幕。
UI體系
Layout
- FrameLayout
- LinearLayout
- RelativeLayout
- TableLayout/TableRow
- GridLayout
- DrawerLayout:DrawerLayout是V4包下提供的一種左滑右滑抽屜佈局效果。
- SlidingPaneLayout
- SlidingPaneLayout是一個水平的多層的佈局控制元件,左側或第一個檢視是導航層,其他的為內容檢視。
- SlidingPaneLayout一般支援左側滑出,沒有右側導航。
View
- Widgets
- TextView:可以實現上下左右圖片文字效果
- ImageView
- ImageButton
- Button
- RadioButton
- CheckBox
- Switch
- ToggleButton
- ProgressBar
- Seekbar
- RatingBar:評分控制元件
- RatingBar是基於SeekBar(拖動條)和ProgressBar(狀態條)的擴充套件,用星形來顯示等級評定,在使用預設RatingBar時,使用者可以通過觸控/拖動/按鍵(比如遙控器)來設定評分, RatingBar自帶有兩種模式 ,一個小風格 ratingBarStyleSmall,大風格為ratingBarStyleIndicator,大的只適合做指示,不適用與使用者互動。
- Spinner:下拉框
- WebView
Containers
- RadioGroup
- ListView
- GridView
- ExpandableListView
- RecyclerView
- ScrollView
- TabHost: TabHost是整個Tab的容器,包含TabWidget和FrameLayout兩個部分,TabWidget是每個Tab的表情,FrameLayout是Tab內容。
- Gallery
- SlidingDrawer:抽屜效果
- VideoView:顯示視訊(SurfaceView+MediaPlayer)
- CardView:安卓5.0提出的卡片式控制元件
- DialerFilter:字義是撥號過濾,文件也沒有解釋。可以通過設定setMode設定模式,主要由數字和信件兩種模式的組合。
Date&Time
TextClock
- TextClock是在Android 4.2(API 17)後推出的用來替代DigitalClock的一個控制元件!
- TextClock可以以字串格式顯示當前的日期和時間,因此推薦在Android 4.2以後使用TextClock。
- 這個控制元件推薦在24進位制的android系統中使用,TextClock提供了兩種不同的格式, 一種是在24進制中顯示時間和日期,另一種是在12進制中顯示時間和日期。大部分人喜歡預設的設定。
AnalogClock:顯示的是模擬時鐘,不顯示秒。
- DigitalClock:顯示的是數字時鐘,可以顯示秒數。
- Chronometer:計時器
- DatePicker:日期選擇控制元件
- TimePicker:時間選擇控制元件
- CalendarView:日曆對話方塊
Expert
- Space:Space標籤於4.0新增的,繼承自View,主要用於佔位
- CheckedTextView:實現打勾的checked效果(CheckBox + TextView)
- QuickContactBadge:點選某個頭像出現類似PopWindow的UI
- ExtractEditText:與輸入法有關
- AutoCompleteTextView:帶自動提示的EditText
- MultiAutoCompleteTextView:多選選項自動提示
- NumberPicker:用於選擇一組預定義好數字的控制元件
- ZoomButton:放大按鈕
- ZoomController:縮放控制元件
- GestureOverlayView:繪製手勢
- SurFaceView : 擁有獨立的繪圖表面,即它不與其宿主視窗共享同一個繪圖表面,可以在一個獨立的執行緒中進行繪製
- TexttureView:兄弟SurfaceView,與SurfaceView相比,TextureView並沒有建立一個單獨的Surface用來繪製,這使得它可以像一般的View一樣執行一些變換操作,設定透明度等。另外,Textureview必須在硬體加速開啟的視窗中。
StackView:StackView控制元件是AdapterViewAnimator的子列,以堆疊的方式顯示多個列表項
ViewStub:
ViewStub 是一個輕量級的View,沒有尺寸,不繪製任何東西,因此繪製或者移除時更省時。(ViewStub不可見,大小為0)
優點
實現View的延遲載入,避免資源的浪費,減少渲染時間,在需要的時候才載入View
缺點
ViewStub所要替代的layout檔案中不能有標籤
ViewStub在載入完後會被移除,或者說是被載入進來的layout替換掉了
- ViewAnimator:可以將多個View組建疊加在一起,ViewAnimator新增加的功能正如他的名字所暗示的,可以在切換時表現動畫效果
- ViewFlipper:ViewFlipper是一個切換控制元件,一般用於圖片的切換,當然它是可以新增View的,而不限定只用於ImageView,當然我們也可以自定義View,只是我們經常利用ViewFlipper來實現的是ImageView的切換,如果切換自定義的View,倒還不如使用ViewPager來做。
- ImageSwitcher:多圖切換瀏覽
- TextSwitcher:可實現文字上下滾動
- AdpaterViewFlipper:繼承AdapterViewAnimator,它會顯示一個View元件,可以通過showPrevious()和showNext()方法控制組件顯示上一個、下一個元件。實現圖片的顯示和自動輪播。
- ViewPager
- Widgets
Custom
- include
- fragment:DialogFragment
- requestFocus:對於非容器控制元件,只能在非容器控制元件標籤中放
<requestFocus />
標籤,表示將當前控制元件設為焦點。 - CustomView: extends systemview; combinationview;extends view
anim
ViewAnimation
TweenAnimation
- alpha
- scale
- translate
- rotate
- interpolator:被用來修飾動畫效果,定義動畫的變化率,可以使存在的動畫效果accelerated(加速),decelerated(減速),repeated(重複),bounced(彈跳)等。
FrameAnimation
- animation-list
PropertyAnimation
ValueAnimator:
ValueAnimator是整個屬性動畫機制當中最核心的一個類,前面我們已經提到了,屬性動畫的執行機制是通過不斷地對值進行操作來實現的,而初始值和結束值之間的動畫過渡就是由ValueAnimator這個類來負責計算的。
它的內部使用一種時間迴圈的機制來計算值與值之間的動畫過渡,我們只需要將初始值和結束值提供給ValueAnimator,並且告訴它動畫所需執行的時長,那麼ValueAnimator就會自動幫我們完成從初始值平滑地過渡到結束值這樣的效果。
除此之外,ValueAnimator還負責管理動畫的播放次數、播放模式、以及對動畫設定監聽器等,確實是一個非常重要的類。
ObjectAnimator:
相比於ValueAnimator,ObjectAnimator可能才是我們最常接觸到的類,因為ValueAnimator只不過是對值進行了一個平滑的動畫過渡,但我們實際使用到這種功能的場景好像並不多。
而ObjectAnimator則就不同了,它是可以直接對任意物件的任意屬性進行動畫操作的,比如說View的alpha屬性。
不過雖說ObjectAnimator會更加常用一些,但是它其實是繼承自ValueAnimator的,底層的動畫實現機制也是基於ValueAnimator來完成的,因此ValueAnimator仍然是整個屬性動畫當中最核心的一個類。
AnimatorSet:
實現組合動畫功能主要需要藉助AnimatorSet這個類,這個類提供了一個play()方法,如果我們向這個方法中傳入一個Animator物件(ValueAnimator或ObjectAnimator)將會返回一個AnimatorSet.Builder的例項。
AnimatorSet.Builder中包括以下四個方法:
after(Animator anim) 將現有動畫插入到傳入的動畫之後執行 after(long delay) 將現有動畫延遲指定毫秒後執行 before(Animator anim) 將現有動畫插入到傳入的動畫之前執行 with(Animator anim) 將現有動畫和傳入的動畫同時執行
Resource
assets:存放原生資原始檔
- AssetManager類:提供對應用程式的原始資原始檔進行訪問;這個類提供了一個低級別的API,它允許你以簡單的位元組流的形式開啟和讀取和應用程式繫結在一起的原始資原始檔,通過getAssets()方法獲取。
res:存放可編譯的資原始檔
- anim
- animator
- color
- drawable
- layout
- menu
- raw
value
arrays.xml:定義陣列資料;
dimens.xml:定義尺度,可以使用Resources.getDimension()獲得這些資源;
strings.xml:定義字串,可以使用Resources.getString()或Resources.getText()方法獲得這些資源;
styles.xml:定義顯示的樣式檔案;
attrs.xml:(在自定義一個控制元件的時候,如果定義一些新的屬性的時候,會用到這個檔案來設定)當中定義的是類的屬性,屬性是為了能在xml檔案中被引用到,換句話說就是指定類中變數(也就是屬性的實際作用者)的值。這些屬性會在類的建構函式中用到。
ids.xml:為應用的相關資源提供唯一的資源id。id是為了獲得xml中的物件而需要的引數,也就是Object=findViewById(R.id.id_name)中的id_name。這些值可以在程式碼中用android.R.id引用到。
colors.xml:定義表示顏色的資料;
bools:Resources res = getResources().getBoolean(R.bool.bool_name);
<?xml version="1.0"encoding="utf-8"?> <resources> <bool name="bool_name">[true| false]</bool> </resources>
- xml
OpenGL