學習android從零開始(20)(自定義控制項)

2021-06-27 12:35:56 字數 3046 閱讀 6419

自定義控制項

自定義控制項基本步驟

繼承view 重寫

三個構造

public class myview extends view

publicmyview(context context, attributeset attrs)

publicmyview(context context)

這三個構造是自動匹配呼叫

重寫ondraw

ondraw

方法給我們提過

canvas

(畫布)

我們自己要生成畫筆(

paint

)以及給畫筆設定顏色和字型大小

@override

protected

void

ondraw(canvas canvas)

在布局xml裡面我們只需要

全類名使用即可

<

com.cym.custom.myview

// 全類名

使用即可

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

如果想要給自定義控制項新增自定義屬性

<

linearlayout

xmlns:android=""

xmlns:myview=""

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android

<

com.cym.custom.myview

android:layout_width="fill_parent"

android:layout_height="wrap_content"

myview:color="@color/white"

myview:fontsize="@dimen/fontsize"

/>

我們就要為自定義屬性寫xml

attrs.xml:

xmlversion="1.0"encoding="utf-8"?>

<

resources

>

<

declare-styleable

name="myview">

標識名<

attr

name="color"format="color"/>

制定名字及屬性格式

<

attr

name="fontsize"format="dimension"/>

制定名字及屬性格式

declare-styleable

>

resources

>

選擇屬性項

colors.xml

xmlversion="1.0"encoding="utf-8"?>

<

resources

>

<

color

name="white">#ffffffff

制定相應屬性內容

resources

>

domenson.xml

xmlversion="1.0"encoding="utf-8"?>

<

resources

>

<

dimen

name="fontsize">100dp

制定相應屬性內容

resources

>

獲得自定義屬性內容

public

myview(context context, attributeset attrs)

自定義音量條

public

class

myview 

extends

view

public

myview(context context, attributeset attrs)

public

myview(context context)

@override

protected

void

ondraw(canvas canvas)

for(

inti =reverseindex;i!=

musicmax

;i++)

} // 定義乙個初始化方法

private

void

init()

// 對要繪製的控制項進行測量

呼叫兩次

@override

protected

void

onmeasure(

intwidthmeasurespec, 

intheightmeasurespec)

//當布局被載入完成的時候,會呼叫乙個方法

@override

protected

void

onfinishinflate()

// 觸控事件

@override

public

boolean

ontouchevent(motioneventevent)

return

true;

} }

課後問題

為什麼要自定義控制項?

因為系統提供的控制項無法滿足我們的需求,所以要使用自定義控制項.

自定義控制項的步驟

重寫三個構造,重寫ondraw(繪製)方法,如果要自定義屬性的話,要寫配置屬性xml,屬性選擇項xml,使用時在布局檔案裡面宣告引用,才可以使用自定義屬性。

如果業務稍微複雜還重寫到

onfinishinflate(布局載入後呼叫該方法)

onmeasure(對繪製控制項進行測量)

以及頻繁修改檢視則會用到

invalidate

()控制項重繪

從零開始學android

相對布局管理器指的是參考某一其他控制項進行擺放,可以通過控制,將元件擺放在乙個指定參考元件的上 下 左 右等位置,這些可以直接通過各個元件提供的屬性完成。下面介紹一下各個方法的基本使用 no.屬性名稱 對應的規則常量 描述1 android layout below relativelayout.b...

20 從零開始學習C語言 補碼

所有整數在計算機中都是以補碼來儲存的,首位0,表示正數,首位1,表示負數 什麼是補碼?1 正整數的補碼是基本身的二進位制數 2 負整數的補碼是 先求該負整數相對應的正整數的二進位制 然後全部取反,末尾加1,不夠位數時,左邊全部補1。不哆位數的解釋 如要儲存int型的整數,一般是4個位元組大小,那32...

從零開始學Android(一)

如果是國內環境,需要配置相關的國內映象和倉庫。有條件的話還是選擇vpn的方式進行更新,國內的倉庫和映象有些檔案缺失,導致相關的依賴檔案缺乏,從而導致工程編譯無法通過。gradle倉庫一般使用阿里雲的的倉庫進行代替,但是阿里雲的倉庫缺失一些檔案,所以一些工程可能無法進行編譯。具體的配置方法如下 首先,...