自定義View例項(三)滑動開關

2021-09-11 13:55:18 字數 3396 閱讀 2353

通過繼承view類自定義view步驟如下

實現view構造方法

測量view的大小,即重寫onmeasure方法

繪製view,即重寫ondraw方法

繼承自view一般不需要重寫onlayout方法

這次我們實現乙個滑動的開關,效果見圖:

//view的大小設定為背景的寬高

@override

protected

void

onmeasure

(int widthmeasurespec,

int heightmeasurespec)

//ondraw方法中要注意drawbitmap呼叫的順序,後呼叫的會覆蓋在前面呼叫的上面

@override

protected

void

ondraw

(canvas canvas)

private

void

initview()

@override

public

void

onclick

(view v)

}private

void

flushstate()

else

flushview()

;//重新整理view,會呼叫ondraw方法

}private

int firstx;

private

int lastx;

//該方法中處理view滑動

@override

public

boolean

ontouchevent

(motionevent event)

int distance =

(int

)(event.

getx()

- lastx)

; lastx =

(int

) event.

getx()

; slidebtn_left += distance;

break

;case motionevent.action_up:

//抬起時根據button位置確定當前狀態

if(isdrag)

else

flushstate()

;}break

;default:}

//重新整理檢視,button就會滑動

flushview()

;return

true;}

private

void

flushview()

}自定義屬性步驟:在vlaues資料夾下新建attrs.xml,定義自己的屬性集

在view第二個構造方法中解析自定義屬性

滑動開關的自定義屬性如下:

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

>

name

="mytogglebutton"

>

name

="background"

format

="reference"

/>

name

="toggle_btn"

format

="reference"

/>

name

="curr_state"

format

="boolean"

/>

declare-styleable

>

resources

>

在布局檔案中直接使用滑動開關:

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

xmlns:android

=""=""

android:orientation

="vertical"

android:layout_width

="match_parent"

android:layout_height

="match_parent"

>

android:id

="@+id/toggle_btn"

android:layout_width

="wrap_content"

android:layout_height

="wrap_content"

="@drawable/switch_background"

="@drawable/slide_button"

="true"

/>

linearlayout

>

Android 自定義滑動開關

自定義view寫了這麼多篇幅,通用的屬性部分 測量 忽略不計 真正實現的部分就不到100行 先上效果圖 關閉狀態 開啟狀態 動起來 下面我們看下我們的實現 override protected void ondraw canvas canvas private void drawswichballb...

Android自定義彈性滑動View

1.記錄一下自己自定義view 2.直接子view只能是乙個 public class slideview extends viewgroup public slideview context context,nullable attributeset attrs public slideview ...

android自定義view(三)

自定義view第三種是 完全自定義 效果如下 需要解決的問題 1 view的測量 onmeasure 2 view的繪製ondraw 3 如果需要變換圖形,需要使用invalid更新,可以實現動態的效果 public class myview extends view public myview c...