自定義View之Switch

2021-07-25 15:36:02 字數 3000 閱讀 8498

思路:

定義類繼承view,重寫幾個用到的方法

1.三個構造方法

2. onmeasure測量

onlayout布局

ondrow繪圖

3.ontouchevent觸控事件方法

invalidate();可以高頻度的呼叫ondraw()

定義乙個外部介面,將開關狀態傳出去

新增設定介面物件的方法,外部進行呼叫

import android.content.context;

import android.graphics.bitmap;

import android.graphics.bitmapfactory;

import android.graphics.canvas;

import android.graphics.paint;

import android.util.attributeset;

import android.view.motionevent;

import android.view.view;

/** * created by maker_huige on 2016/12/26.

*/public

class

toggleview

extends

view

public

toggleview(context context, attributeset attrs)

public

toggleview(context context, attributeset attrs, int defstyleattr)

private

void

init(attributeset attrs)

/*** 自定義元件的三個方法,執行onresum後執行

* onmeasure測量

* onlayout布局

* ondrow繪圖

* view需要兩個

* viewgrowp需要三個

*/@override

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec)

@override

protected

void

ondraw(canvas canvas) else

canvas.drawbitmap(bitmap_slide_button,newleft,0,paint);

}else else}}

@override

public

boolean

ontouchevent(motionevent event)

mswitchstate = state;

break;

}invalidate();

return

true;

}// 宣告介面物件

public

inte***ce

onswitchstateupdatelistener

// 新增設定介面物件的方法,外部進行呼叫

public

void

setonswitchstateupdatelistener(onswitchstateupdatelistener onswitchstateupdatelistener)

public

void

setswitchbackgroundresource(int switch_background)

public

void

setslidebuttonresource(int slide_button)

}

在activity中設定事件***,通過匿名內部類的方式並將state狀態列印出來

public

class

toggleactivity

extends

activity

});}

private

void

initui()

}

xml

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

xmlns:itheima=""

xmlns:android=""

android:layout_width="match_parent"

android:layout_height="match_parent">

itheima:switch_background="@mipmap/switch_background"

itheima:slide_button="@mipmap/slide_button"

itheima:switch_state="true"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerinparent="true"

android:id="@+id/toggleview"

/>

relativelayout>

自定義屬性的xml

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

name="toggleview">

name="switch_background"

format="reference"/>

name="slide_button"

format="reference"/>

name="switch_state"

format="boolean"/>

declare-styleable>

resources>

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...

Android自定義控制項之自定義View 二

效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...

iOS 之自定義view

自定義view的兩種方式 第一種 純手寫 建立 instancetype initwithframe cgrect frame return self 在這裡設定控制項的frame 在改方法中一定要呼叫 super layoutsubviews 方法 主要是設定空間的frame值 加約束 void ...