## 本節引言:
> 上兩小節我們學習了Drawable以及Bitmap,都是加載好圖片的,而本節我們要學習的繪圖相關的 一些API,他們分別是Canvas(畫布),Paint(畫筆),Path(路徑)!本節非常重要,同時也是我們 自定義View的基礎哦~好的,話不多說開始本節內容~
>
> 官方API文檔:[Canvas](http://androiddoc.qiniudn.com/reference/android/graphics/Canvas.html);[Paint](http://androiddoc.qiniudn.com/reference/android/graphics/Paint.html);[Path](http://androiddoc.qiniudn.com/reference/android/graphics/Path.html);
* * *
## 1.相關方法詳解
* * *
### 1)Paint(畫筆):
> 就是畫筆,用于設置繪制風格,如:線寬(筆觸粗細),顏色,透明度和填充風格等 直接使用無參構造方法就可以創建Paint實例:?**Paint paint = new Paint( );**
>
> 我們可以通過下述方法來設置Paint(畫筆)的相關屬性,另外,關于這個屬性有兩種, 圖形繪制相關與文本繪制相關:
>
> * **setARGB**(int a,int r,int g,int b): 設置繪制的顏色,a代表透明度,r,g,b代表顏色值。
> * **setAlpha**(int a): 設置繪制圖形的透明度。
> * **setColor**(int color): 設置繪制的顏色,使用顏色值來表示,該顏色值包括透明度和RGB顏色。
> * **setAntiAlias**(boolean aa): 設置是否使用抗鋸齒功能,會消耗較大資源,繪制圖形速度會變慢。
> * **setDither**(boolean dither): 設定是否使用圖像抖動處理,會使繪制出來的圖片顏色更加平滑和飽滿,圖像更加清晰
> * **setFilterBitmap**(boolean filter): 如果該項設置為true,則圖像在動畫進行中會濾掉對Bitmap圖像的優化操作, 加快顯示速度,本設置項依賴于dither和xfermode的設置
> * **setMaskFilter**(MaskFilter maskfilter): 設置MaskFilter,可以用不同的MaskFilter實現濾鏡的效果,如濾化,立體等
> * **setColorFilter**(ColorFilter colorfilter): 設置顏色過濾器,可以在繪制顏色時實現不用顏色的變換效果
> * **setPathEffect**(PathEffect effect) 設置繪制路徑的效果,如點畫線等
> * **setShader**(Shader shader): 設置圖像效果,使用Shader可以繪制出各種漸變效果
> * **setShadowLayer**(float radius ,float dx,float dy,int color):在圖形下面設置陰影層,產生陰影效果, radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色
> * **setStyle**(Paint.Style style): 設置畫筆的樣式,為FILL,FILL_OR_STROKE,或STROKE
> * **setStrokeCap**(Paint.Cap cap): 當畫筆樣式為STROKE或FILL_OR_STROKE時,設置筆刷的圖形樣式, 如圓形樣Cap.ROUND,或方形樣式Cap.SQUARE
> * **setSrokeJoin**(Paint.Join join): 設置繪制時各圖形的結合方式,如平滑效果等
> * **setStrokeWidth**(float width): 當畫筆樣式為STROKE或FILL_OR_STROKE時,設置筆刷的粗細度
> * **setXfermode**(Xfermode xfermode): 設置圖形重疊時的處理方式,如合并,取交集或并集,經常用來制作橡皮的擦除效果
> * **setFakeBoldText**(boolean fakeBoldText): 模擬實現粗體文字,設置在小字體上效果會非常差
> * **setSubpixelText**(boolean subpixelText): 設置該項為true,將有助于文本在LCD屏幕上的顯示效果
> * **setTextAlign**(Paint.Align align): 設置繪制文字的對齊方向
> * **setTextScaleX**(float scaleX): 設置繪制文字x軸的縮放比例,可以實現文字的拉伸的效果
> * **setTextSize**(float textSize): 設置繪制文字的字號大小
> * **setTextSkewX**(float skewX): 設置斜體文字,skewX為傾斜弧度
> * **setTypeface**(Typeface typeface): 設置Typeface對象,即字體風格,包括粗體,斜體以及襯線體,非襯線體等
> * **setUnderlineText**(boolean underlineText): 設置帶有下劃線的文字效果
> * **setStrikeThruText**(boolean strikeThruText): 設置帶有刪除線的效果
> * **setStrokeJoin**(Paint.Join join): 設置結合處的樣子,Miter:結合處為銳角, Round:結合處為圓弧:BEVEL:結合處為直線
> * **setStrokeMiter**(float miter):設置畫筆傾斜度
> * **setStrokeCap**?(Paint.Cap cap):設置轉彎處的風格 其他常用方法:
> * float?**ascent**( ):測量baseline之上至字符最高處的距離?
> * float?**descent**():baseline之下至字符最低處的距離
> * int?**breakText**(char[] text, int index, int count, float maxWidth, float[] measuredWidth): 檢測一行顯示多少文字
> * **clearShadowLayer**( ):清除陰影層 其他的自行查閱文檔~
* * *
### 2)Canvas(畫布):
> 畫筆有了,接著就到畫筆(Canvas),總不能憑空作畫是吧~常用方法如下:
>
> 首先是**構造方法**,Canvas的構造方法有兩種:
>
> **Canvas()**: 創建一個空的畫布,可以使用setBitmap()方法來設置繪制具體的畫布。
>
> **Canvas(Bitmap bitmap)**: 以bitmap對象創建一個畫布,將內容都繪制在bitmap上,因此bitmap不得為null。
>
> 接著是?**1.drawXXX()**方法族:以一定的坐標值在當前畫圖區域畫圖,另外圖層會疊加, 即后面繪畫的圖層會覆蓋前面繪畫的圖層。 比如:
>
> * **drawRect**(RectF rect, Paint paint) :繪制區域,參數一為RectF一個區域
> * **drawPath**(Path path, Paint paint) :繪制一個路徑,參數一為Path路徑對象
> * **drawBitmap**(Bitmap bitmap, Rect src, Rect dst, Paint paint) : 貼圖,參數一就是我們常規的Bitmap對象,參數二是源區域(這里是bitmap), 參數三是目標區域(應該在canvas的位置和大小),參數四是Paint畫刷對象, 因為用到了縮放和拉伸的可能,當原始Rect不等于目標Rect時性能將會有大幅損失。
> * **drawLine**(float startX, float startY, float stopX, float stopY, Paintpaint) : 畫線,參數一起始點的x軸位置,參數二起始點的y軸位置,參數三終點的x軸水平位置, 參數四y軸垂直位置,最后一個參數為Paint 畫刷對象。
> * **drawPoint**(float x, float y, Paint paint): 畫點,參數一水平x軸,參數二垂直y軸,第三個參數為Paint對象。
> * **drawText**(String text, float x, floaty, Paint paint) : 渲染文本,Canvas類除了上面的還可以描繪文字,參數一是String類型的文本, 參數二x軸,參數三y軸,參數四是Paint對象。
> * **drawOval**(RectF oval, Paint paint):畫橢圓,參數一是掃描區域,參數二為paint對象;
> * **drawCircle**(float cx, float cy, float radius,Paint paint): 繪制圓,參數一是中心點的x軸,參數二是中心點的y軸,參數三是半徑,參數四是paint對象;
> * **drawArc**(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint): 畫弧,參數一是RectF對象,一個矩形區域橢圓形的界限用于定義在形狀、大小、電弧,參數二是起始角 (度)在電弧的開始,參數三掃描角(度)開始順時針測量的,參數四是如果這是真的話,包括橢圓中心的電 弧,并關閉它,如果它是假這將是一個弧線,參數五是Paint對象;
>
> 2.**clipXXX()**方法族:在當前的畫圖區域裁剪(clip)出一個新的畫圖區域,這個畫圖區域就是canvas 對象的當前畫圖區域了。比如:clipRect(new Rect()),那么該矩形區域就是canvas的當前畫圖區域
>
> 3.**save()**和**restore()**方法:?**save**( ):用來保存Canvas的狀態。save之后,可以調用Canvas的平移、放縮、旋轉、錯切、裁剪等操作!?**restore**():用來恢復Canvas之前保存的狀態。防止save后對Canvas執行的操作對后續的繪制有影響。 save()和restore()要配對使用(restore可以比save少,但不能多),若restore調用次數比save多,會報錯!
>
> 4.**translate**(float dx, float dy): 平移,將畫布的坐標原點向左右方向移動x,向上下方向移動y.canvas的默認位置是在(0,0)
>
> 5.**scale**(float sx, float sy):擴大,x為水平方向的放大倍數,y為豎直方向的放大倍數
>
> 6.**rotate**(float degrees):旋轉,angle指旋轉的角度,順時針旋轉
* * *
### 3)Path(路徑)
> 簡單點說就是描點,連線~在創建好我們的Path路徑后,可以調用Canvas的**drawPath**(path,paint) 將圖形繪制出來~常用方法如下:
>
> * **addArc**(RectF oval, float startAngle, float sweepAngle:為路徑添加一個多邊形
> * **addCircle**(float x, float y, float radius, Path.Direction dir):給path添加圓圈
> * **addOval**(RectF oval, Path.Direction dir):添加橢圓形
> * **addRect**(RectF rect, Path.Direction dir):添加一個區域
> * **addRoundRect**(RectF rect, float[] radii, Path.Direction dir):添加一個圓角區域
> * **isEmpty**():判斷路徑是否為空
> * **transform**(Matrix matrix):應用矩陣變換
> * **transform**(Matrix matrix, Path dst):應用矩陣變換并將結果放到新的路徑中,即第二個參數。
>
> 更高級的效果可以使用PathEffect類!
>
> 幾個To:
>
> * **moveTo**(float x, float y):不會進行繪制,只用于移動移動畫筆
> * **lineTo**(float x, float y):用于直線繪制,默認從(0,0)開始繪制,用moveTo移動! 比如 mPath.lineTo(300, 300); canvas.drawPath(mPath, mPaint);
> * **quadTo**(float x1, float y1, float x2, float y2): 用于繪制圓滑曲線,即貝塞爾曲線,同樣可以結合moveTo使用!?
> * **rCubicTo**(float x1, float y1, float x2, float y2, float x3, float y3) 同樣是用來實現貝塞爾曲線的。 (x1,y1) 為控制點,(x2,y2)為控制點,(x3,y3) 為結束點。 Same as cubicTo, but the coordinates are considered relative to the current point on this contour.就是多一個控制點而已~ 繪制上述的曲線: mPath.moveTo(100, 500); mPath.cubicTo(100, 500, 300, 100, 600, 500); 如果不加上面的那個moveTo的話:則以(0,0)為起點,(100,500)和(300,100)為控制點繪制貝塞爾曲線?
> * **arcTo**(RectF oval, float startAngle, float sweepAngle): 繪制弧線(實際是截取圓或橢圓的一部分)ovalRectF為橢圓的矩形,startAngle 為開始角度, sweepAngle 為結束角度。
* * *
## 2.動手試試:
> 屬性那么多,肯定要手把手的擼一下,才能加深我們的映像是吧~ 嘿嘿,畫圖要么在View上畫,要么在SurfaceView上畫,這里我們在View上畫吧, 我們定義一個View類,然后再onDraw()里完成繪制工作!
~~~
/**
* Created by Jay on 2015/10/15 0015.
*/
public class MyView extends View{
private Paint mPaint;
public MyView(Context context) {
super(context);
init();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init(){
mPaint = new Paint();
mPaint.setAntiAlias(true); //抗鋸齒
mPaint.setColor(getResources().getColor(R.color.puple));//畫筆顏色
mPaint.setStyle(Paint.Style.FILL); //畫筆風格
mPaint.setTextSize(36); //繪制文字大小,單位px
mPaint.setStrokeWidth(5); //畫筆粗細
}
//重寫該方法,在這里繪圖
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
~~~
然后布局那里設置下這個View就好,下述代碼都寫在onDrawable中~
* * *
### 1)設置畫布顏色:
~~~
canvas.drawColor(getResources().getColor(R.color.yellow)); //設置畫布背景顏色
~~~
* * *
### 2)繪制圓形:
~~~
canvas.drawCircle(200, 200, 100, mPaint); //畫實心圓
~~~

* * *
### 3)繪制矩形:
~~~
canvas.drawRect(0, 0, 200, 100, mPaint); //畫矩形
~~~

* * *
### 4)繪制Bitmap:
~~~
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher), 0, 0, mPaint);
~~~

* * *
### 5)繪制弧形區域:
~~~
canvas.drawArc(new RectF(0, 0, 100, 100),0,90,true,mPaint); //繪制弧形區域
~~~

假如true改為false:

* * *
### 6)繪制圓角矩形
~~~
canvas.drawRoundRect(new RectF(10,10,210,110),15,15,mPaint); //畫圓角矩形
~~~

* * *
### 7)繪制橢圓
~~~
canvas.drawOval(new RectF(0,0,200,300),mPaint); //畫橢圓
~~~

* * *
### 8)繪制多邊形:
~~~
Path path = new Path();
path.moveTo(10, 10); //移動到 坐標10,10
path.lineTo(100, 50);
path.lineTo(200,40);
path.lineTo(300, 20);
path.lineTo(200, 10);
path.lineTo(100, 70);
path.lineTo(50, 40);
path.close();
canvas.drawPath(path,mPaint);
~~~

* * *
### 9)繪制文字:
~~~
canvas.drawText("最喜歡看曹神日狗了~",50,50,mPaint); //繪制文字
~~~

你也可以沿著某條Path來繪制這些文字:
~~~
Path path = new Path();
path.moveTo(50,50);
path.lineTo(100, 100);
path.lineTo(200, 200);
path.lineTo(300, 300);
path.close();
canvas.drawTextOnPath("最喜歡看曹神日狗了~", path, 50, 50, mPaint); //繪制文字
~~~

* * *
### 10)繪制自定義的圖形:
代碼來源于網上:
~~~
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.translate(canvas.getWidth()/2, 200); //將位置移動畫紙的坐標點:150,150
canvas.drawCircle(0, 0, 100, mPaint); //畫圓圈
//使用path繪制路徑文字
canvas.save();
canvas.translate(-75, -75);
Path path = new Path();
path.addArc(new RectF(0,0,150,150), -180, 180);
Paint citePaint = new Paint(mPaint);
citePaint.setTextSize(14);
citePaint.setStrokeWidth(1);
canvas.drawTextOnPath("繪制表盤~", path, 28, 0, citePaint);
canvas.restore();
Paint tmpPaint = new Paint(mPaint); //小刻度畫筆對象
tmpPaint.setStrokeWidth(1);
float y=100;
int count = 60; //總刻度數
for(int i=0 ; i <count ; i++){
if(i%5 == 0){
canvas.drawLine(0f, y, 0, y+12f, mPaint);
canvas.drawText(String.valueOf(i/5+1), -4f, y+25f, tmpPaint);
}else{
canvas.drawLine(0f, y, 0f, y +5f, tmpPaint);
}
canvas.rotate(360/count,0f,0f); //旋轉畫紙
}
//繪制指針
tmpPaint.setColor(Color.GRAY);
tmpPaint.setStrokeWidth(4);
canvas.drawCircle(0, 0, 7, tmpPaint);
tmpPaint.setStyle(Paint.Style.FILL);
tmpPaint.setColor(Color.YELLOW);
canvas.drawCircle(0, 0, 5, tmpPaint);
canvas.drawLine(0, 10, 0, -65, mPaint);
}
~~~

* * *
## 本節小結:
> 本節我們對android.graphics接口類下的三個繪圖API:Canvas(畫布),Paint(畫筆),Path(路徑)進行 了學習,方法有很多,別去死記,用到的時候查就好,這里我們先有個大概映像即可,自定義控件那里 我們再來慢慢糾結~好的,就說這么多,謝謝~
- 第一章——環境搭建和開發相關
- 1.0 Android基礎入門教程
- 1.1 背景相關與系統架構分析
- 1.2 開發環境搭建
- 1.2.1 使用Eclipse + ADT + SDK開發Android APP
- 1.2.2 使用Android Studio開發Android APP
- 1.3 SDK更新不了問題解決
- 1.4 Genymotion模擬器安裝
- 1.5 GIT教程
- 1.5.1 Git使用教程之本地倉庫的基本操作
- 1.5.2 Git之使用GitHub搭建遠程倉庫
- 1.6 .9(九妹)圖片怎么玩
- 1.7 界面原型設計
- 1.8 工程相關解析(各種文件,資源訪問)
- 1.9 Android程序簽名打包
- 1.11 反編譯APK獲取代碼&資源
- 第二章——Android中的UI組件的詳解
- 2.1 View與ViewGroup的概念
- 2.2 布局
- 2.2.1 LinearLayout(線性布局)
- 2.2.2 RelativeLayout(相對布局)
- 2.2.3 TableLayout(表格布局)
- 2.2.4 FrameLayout(幀布局)
- 2.2.5 GridLayout(網格布局)
- 2.2.6 AbsoluteLayout(絕對布局)
- 2.3 表單
- 2.3.1 TextView(文本框)詳解
- 2.3.2 EditText(輸入框)詳解
- 2.3.3 Button(按鈕)與ImageButton(圖像按鈕)
- 2.3.4 ImageView(圖像視圖)
- 2.3.5.RadioButton(單選按鈕)&Checkbox(復選框)
- 2.3.6 開關按鈕ToggleButton和開關Switch
- 2.3.7 ProgressBar(進度條)
- 2.3.8 SeekBar(拖動條)
- 2.3.9 RatingBar(星級評分條)
- 2.4 控件
- 2.4.1 ScrollView(滾動條)
- 2.4.2 Date & Time組件(上)
- 2.4.3 Date & Time組件(下)
- 2.4.4 Adapter基礎講解
- 2.4.5 ListView簡單實用
- 2.4.6 BaseAdapter優化
- 2.4.7ListView的焦點問題
- 2.4.8 ListView之checkbox錯位問題解決
- 2.4.9 ListView的數據更新問題
- 2.5 Adapter類控件
- 2.5.0 構建一個可復用的自定義BaseAdapter
- 2.5.1 ListView Item多布局的實現
- 2.5.2 GridView(網格視圖)的基本使用
- 2.5.3 Spinner(列表選項框)的基本使用
- 2.5.4 AutoCompleteTextView(自動完成文本框)的基本使用
- 2.5.5 ExpandableListView(可折疊列表)的基本使用
- 2.5.6 ViewFlipper(翻轉視圖)的基本使用
- 2.5.7 Toast(吐司)的基本使用
- 2.5.8 Notification(狀態欄通知)詳解
- 2.5.9 AlertDialog(對話框)詳解
- 2.6 對話框控件
- 2.6.0 其他幾種常用對話框基本使用
- 2.6.1 PopupWindow(懸浮框)的基本使用
- 2.6.2 菜單(Menu)
- 2.6.3 ViewPager的簡單使用
- 2.6.4 DrawerLayout(官方側滑菜單)的簡單使用
- 第三章——Android的事件處理機制
- 3.1.1 基于監聽的事件處理機制
- 3.2 基于回調的事件處理機制
- 3.3 Handler消息傳遞機制淺析
- 3.4 TouchListener PK OnTouchEvent + 多點觸碰
- 3.5 監聽EditText的內容變化
- 3.6 響應系統設置的事件(Configuration類)
- 3.7 AnsyncTask異步任務
- 3.8 Gestures(手勢)
- 第四章——Android的四大組件
- 4.1.1 Activity初學乍練
- 4.1.2 Activity初窺門徑
- 4.1.3 Activity登堂入室
- 4.2.1 Service初涉
- 4.2.2 Service進階
- 4.2.3 Service精通
- 4.3.1 BroadcastReceiver牛刀小試
- 4.3.2 BroadcastReceiver庖丁解牛
- 4.4.1 ContentProvider初探
- 4.4.2 ContentProvider再探——Document Provider
- 4.5.1 Intent的基本使用
- 4.5.2 Intent之復雜數據的傳遞
- 第五章——Fragment(碎片)
- 5.1 Fragment基本概述
- 5.2.1 Fragment實例精講——底部導航欄的實現(方法1)
- 5.2.2 Fragment實例精講——底部導航欄的實現(方法2)
- 5.2.3 Fragment實例精講——底部導航欄的實現(方法3)
- 5.2.4 Fragment實例精講——底部導航欄+ViewPager滑動切換頁面
- 5.2.5 Fragment實例精講——新聞(購物)類App列表Fragment的簡單實現
- 第六章——Android數據存儲與訪問
- 6.1 數據存儲與訪問之——文件存儲讀寫
- 6.2 數據存儲與訪問之——SharedPreferences保存用戶偏好參數
- 6.3.1 數據存儲與訪問之——初見SQLite數據庫
- 6.3.2 數據存儲與訪問之——又見SQLite數據庫
- 第七章——Android網絡編程
- 7.1.1 Android網絡編程要學的東西與Http協議學習
- 7.1.2 Android Http請求頭與響應頭的學習
- 7.1.3 Android HTTP請求方式:HttpURLConnection
- 7.1.4 Android HTTP請求方式:HttpClient
- 7.2.1 Android XML數據解析
- 7.2.2 Android JSON數據解析
- 7.3.1 Android 文件上傳
- 7.3.2 Android 文件下載(1)
- 7.3.3 Android 文件下載(2)
- 7.4 Android 調用 WebService
- 7.5.1 WebView(網頁視圖)基本用法
- 7.5.2 WebView和JavaScrip交互基礎
- 7.5.3 Android 4.4后WebView的一些注意事項
- 7.5.4 WebView文件下載
- 7.5.5 WebView緩存問題
- 7.5.6 WebView處理網頁返回的錯誤碼信息
- 7.6.1 Socket學習網絡基礎準備
- 7.6.2 基于TCP協議的Socket通信(1)
- 7.6.3 基于TCP協議的Socket通信(2)
- 7.6.4 基于UDP協議的Socket通信
- 第八章——Android繪圖與動畫基礎
- 8.1.1 Android中的13種Drawable小結 Part 1
- 8.1.2 Android中的13種Drawable小結 Part 2
- 8.1.3 Android中的13種Drawable小結 Part 3
- 8.2.1 Bitmap(位圖)全解析 Part 1
- 8.2.2 Bitmap引起的OOM問題
- 8.3.1 三個繪圖工具類詳解
- 8.3.2 繪圖類實戰示例
- 8.3.3 Paint API之—— MaskFilter(面具)
- 8.3.4 Paint API之—— Xfermode與PorterDuff詳解(一)
- 8.3.5 Paint API之—— Xfermode與PorterDuff詳解(二)
- 8.3.6 Paint API之—— Xfermode與PorterDuff詳解(三)
- 8.3.7 Paint API之—— Xfermode與PorterDuff詳解(四)
- 8.3.8 Paint API之—— Xfermode與PorterDuff詳解(五)
- 8.3.9 Paint API之—— ColorFilter(顏色過濾器)(1/3)
- 8.3.10 Paint API之—— ColorFilter(顏色過濾器)(2-3)
- 8.3.11 Paint API之—— ColorFilter(顏色過濾器)(3-3)
- 8.3.12 Paint API之—— PathEffect(路徑效果)
- 8.3.13 Paint API之—— Shader(圖像渲染)
- 8.3.14 Paint幾個枚舉/常量值以及ShadowLayer陰影效果
- 8.3.15 Paint API之——Typeface(字型)
- 8.3.16 Canvas API詳解(Part 1)
- 8.3.17 Canvas API詳解(Part 2)剪切方法合集
- 8.3.18 Canvas API詳解(Part 3)Matrix和drawBitmapMash
- 8.4.1 Android動畫合集之幀動畫
- 8.4.2 Android動畫合集之補間動畫
- 8.4.3 Android動畫合集之屬性動畫-初見
- 8.4.4 Android動畫合集之屬性動畫-又見
- 第九章——Android中的多媒體開發
- 9.1 使用SoundPool播放音效(Duang~)
- 9.2 MediaPlayer播放音頻與視頻
- 9.3 使用Camera拍照
- 9.4 使用MediaRecord錄音
- 第十章——系統服務
- 10.1 TelephonyManager(電話管理器)
- 10.2 SmsManager(短信管理器)
- 10.3 AudioManager(音頻管理器)
- 10.4 Vibrator(振動器)
- 10.5 AlarmManager(鬧鐘服務)
- 10.6 PowerManager(電源服務)
- 10.7 WindowManager(窗口管理服務)
- 10.8 LayoutInflater(布局服務)
- 10.9 WallpaperManager(壁紙管理器)
- 10.10 傳感器專題(1)——相關介紹
- 10.11 傳感器專題(2)——方向傳感器
- 10.12 傳感器專題(3)——加速度/陀螺儀傳感器
- 10.12 傳感器專題(4)——其他傳感器了解
- 10.14 Android GPS初涉
- 第十一章——由來、答疑和資源
- 11.0《2015最新Android基礎入門教程》完結散花~