天天看點

自定義初學1——擴充系統控件

在Android中自定義控件時,如果Android系統中已存在對應的控件,就應該擴充功能相近的系統控件,這樣既可以減少工作量,又可以避免處理複雜的繪圖邏輯。代碼複用是程式開發的一條重要原則,是以一定不要盲目的擴充View。

好了,先從一個擴充的TextView入手吧

public class CustomTextView extends TextView {

}

系統會提示我們建立構造函數,說一下這三個構造函數的不同。

  • public CustomTextView(Context context):通常在代碼中使用,控件的所有屬性都使用預設值
  • public CustomTextView(Context context, AttributeSet attrs):如果在xml布局中設定控件的屬性,這些屬性會存到attrs中然後傳遞給構造函數,這些屬性值會決定控件的最終效果
  • public CustomTextView(Context context, AttributeSet attrs,int defStyle):如果需要在xml布局中為控件設定style屬性,defStyle會存儲style的id并将其傳遞給構造函數,然後控件會根據屬性style的屬性值設定自己的樣式

我們就設定一下字型加粗吧

/**

  * 初始化畫筆

  */

 private void initPaint() {

  // 執行個體化畫筆

  mPaint=getPaint();

  // 設定字型加粗

  mPaint.setFakeBoldText(true);

 }

Paint的set方法可以設定畫筆的屬性,具體的可以看API的解釋

然後調用onDraw(canvas)方法,否則所有繪制效果都無法展示

@Override

 protected void onDraw(Canvas canvas) {

  // TODO Auto-generated method stub

  super.onDraw(canvas);

Canvas是畫布的意思,Paint是畫筆,通過Canvas下的各類drawXXX方法繪制各種不同的東西,然後展示在畫布上

Canvas的相關drawXXX方法如下

在xml布局檔案中使用自定義控件時,控件的标簽必須使用控件的完整類名

activity_main.xml如下:

<RelativeLayout xmlns:android="

http://schemas.android.com/apk/res/android

"

    xmlns:tools="

http://schemas.android.com/tools

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    <com.example.activity.CustomTextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="這是自定義TextView"

        android:textSize="20sp" />

</RelativeLayout>

好了,現在看一下效果吧,運作效果如下:

源代碼

參考:

http://blog.csdn.net/aigestudio/article/details/41212583

繼續閱讀