Android自定義控制項

2021-10-09 20:01:58 字數 2045 閱讀 8408

在android中,無論是熟知的布局,還是控制項,統統全都繼承自基類view。

自定義view實現有幾種:

view的繪製基本由measure()、layout()、draw()這個三個函式完成:

在android座標系中,以螢幕左上角作為原點,這個原點向右是x軸的正軸,向下是y軸正軸。

結合以上的api,可以計算出檢視的寬度和高度,可以使用如下方式計算:

這裡我們介紹最複雜的一種,自定義view。

無論是繼承系統view還是直接繼承view,都需要對建構函式進行重寫,建構函式有多個,至少要重寫其中乙個才行。

public class customview extends view

/*** 在xml布局檔案中使用時會自動呼叫該方法

*/public customview(context context, attributeset attrs)

...//更多引數的建構函式

}

android系統的控制項以android開頭的都是系統自帶的屬性。為了方便配置自定義view的屬性,我們也可以自定義屬性值。android自定義屬性可分為以下幾步:

attrs.xml檔案示例如下:

<?xml version="1.0" encoding="utf-8"?>

**實現示例如下:

public class mytextview extends view 

}

布局檔案使用示例如下:

measurespec是view的內部類,它封裝了乙個view的尺寸,在onmeasure()當中會根據這個measurespec的值來確定view的寬高。measurespec的值儲存在乙個int值當中。乙個int值有32位,前兩位表示模式mode後30位表示大小size。即measurespec = mode + size。

在measurespec當中一共存在三種mode:

常見的使用方式如下:

// 獲取測量模式(mode)

int specmode = measurespec.getmode(measurespec)

// 獲取測量大小(size)

int specsize = measurespec.getsize(measurespec)

// 通過mode 和 size 生成新的specmode

int measurespec=measurespec.makemeasurespec(size, mode);

整個測量過程的入口位於view的measure方法當中,該方法做了一些引數的初始化之後呼叫了onmeasure方法,這裡我們主要分析onmeasure。onmeasure原始碼如下:

protected void onmeasure(int widthmeasurespec, int heightmeasurespec)
layout()過程,對於view來說用來計算view的位置引數,對於viewgroup來說,除了要測量自身位置,還需要測量子view的位置。layout()方法是整個layout()流程的入口,並在layout方法中呼叫了onlayout方法,主要是進行子view的計算。

draw流程也就是的view繪製到螢幕上的過程,整個流程的入口在viewdraw()方法之中,而原始碼注釋也寫的很明白,整個過程可以分為6個步驟:

自定義view在android的開發中的重要性還是很大的,因為僅僅靠系統提供的控制項和元件,無論是美觀度還是使用度,再或者是新特性上,都無法滿足特定的業務場景。因此,常常要用到自定義view,這就要求要在自己的專案自己完成特殊控制項的自主開發。自定義控制項在開發過程中也屬於重點和難點,應該多花時間進行學習和研究,重點有以下幾個:

Android 自定義控制項

幹android也有一段的時間了,自定義這塊的東西覺得還是很有比較複習一下基礎的東西。自定義控制項和自定義元件基本上的使用都是在專案中基本的android控制項滿足不了需求的時候使用的。所以,如果要高出特別炫的特效,或者比較特殊的控制項排列方式,例如瀑布流,那麼就要好好學學自定義咯。首先,先簡單的介...

android自定義控制項

android自定義控制項 二 入門,繼承view 說說android 兩種為自定義元件新增屬性的使用方法和區別 自定義控制項的屬性 自定義控制項 今天花了3,4個小時看了自定義控制項,看 懂了,還沒有實踐,因為時間不夠,日後實踐。總結下 自定義控制項有3種方式 繼承已有控制項 繼承乙個容器控制項,...

Android自定義控制項

android學習筆記,整理給自己複習的時候看的,謝謝!1.自定義開關 1.宣告介面物件 public inte ce onswitchstateupdatelistener 2.新增設定介面物件的方法,外部進行呼叫 public void setonswitchstateupdatelistene...