該系列教程概述與目錄:http://www.cnblogs.com/chengyujia/p/5787111.htmlhtml
在本項目中,不管是遊戲主區域仍是虛擬方向鍵都是經過自定義控件來實現的,咱們有必要先對自定義控件有個簡單的瞭解。並且經過自定義控件的學習能更好的理解系統自帶控件的內部機制。android
咱們平時用的控件(好比Button、TextView等)是Android系統自帶的控件,咱們能夠拿來直接用。但當自帶的控件不夠用或不能知足咱們的需求時,就須要咱們本身作控件了。咱們本身作的控件就叫自定義控件。app
Android自帶的控件都是直接或間接的繼承自android.view.View這個類佈局
在Android Studio中,鼠標點擊某個類,而後按快捷鍵Ctrl+H,就能夠看到這個類的繼承關係。學習
下面這張截圖以Button爲例:測試
經過這張圖咱們能夠看到Button繼承自TextView,TextView又繼承自View,同時Button下面還有多個子類,它們都是View的子類。this
Android自帶的控件都繼承自View或View的子類,而咱們自定義的控件也是如此。spa
在之前的手機上通常都有物理方向鍵,而如今幾乎都沒了。但留給了咱們更大的屏幕空間,讓咱們來自由發揮。咱們首先須要經過自定義控件來作一個虛擬的方向鍵。3d
下面咱們就來動手作!code
首先咱們新建一個工程,工程名叫HappySnake。
而後新建一個類,類名叫DirectionKeys,而後讓該類繼承自View。
但此時報錯了:
緣由是雖然View中有個沒有參數的默認構造方法,但這個構造方法是谷歌開發人員內部測試用的,只有包內的訪問權限,不對外提供。以下:
/** * Non-public constructor for use in testing */ View() { mResources = null; mRenderNode = RenderNode.create(getClass().getName(), this); }
因此咱們的自定義控件必須在本身的構造方法中調用一個View中的Public構造方法。這裏咱們的構造方法中的參數也須要和View中的匹配,由於這些參數是系統框須要的。
將光標移到標錯的紅線上,按快捷鍵Alt+Enter能夠看到修復錯誤的提示:
按照上圖的提示咱們選擇第一項,建立匹配父類的構造方法:
從上圖能夠看到View中有4個構造方法,其中第4個也就是有4個參數的構造方法是從Android5.0開始有的。
經常使用的是第一個和第二個構造方法,其中第一個是咱們在代碼中經過new關鍵字建立該控件實例時用,而第二個是系統在XML佈局文件中建立實例時調用。
在本項目中只用到了第二個構造方法,但通常把前兩個都寫上吧,萬一用到呢。寫也不復雜,只要按住Ctrl,選中須要的,點「OK」就能夠了。
package net.chengyujia.happysnake; import android.content.Context; import android.util.AttributeSet; import android.view.View; /** * 屏幕上的虛擬方向鍵 * Created by ChengYuJia on 2016/8/19. */ public class DirectionKeys extends View { //只有一個參數的構造方法是咱們在程序中經過「new」關鍵字建立實例時調用。 public DirectionKeys(Context context) { super(context); } //有兩個參數的構造方法是系統在XML佈局文件中建立實例時調用。 public DirectionKeys(Context context, AttributeSet attrs) { super(context, attrs); } }
若是不作自定義屬性的話,不須要對構造方法作任何修改,這就能夠了。
到目前爲止這個自定義的控件尚未實質性內容,文章長了編輯起來不太方便,咱們下篇繼續~~~