總共有兩張,一張背景,一張遮罩。背景有開關字樣,通過遮住乙個字來實現開關按鈕。繼承自view控制項,通過canvas和paint結合來實現的繪製。
通過canvas的drawbitmap方法和距離左邊的位置來繪製,呼叫invalidate方法來不斷的更新ui,就可以實現滑動的效果。
public class mytogglebutton extends view implements onclicklistener/*** 在布局檔案中聲名的view,建立時由系統自動呼叫。
* @param context 上下文物件
* @param attrs 屬性集
*/public mytogglebutton(context context, attributeset attrs)
/*** 初始化
*/private void initview()
/* * view 物件顯示的螢幕上,有幾個重要步驟:
* 1、構造方法 建立 物件。
* 2、測量view的大小。 onmeasure(int,int);
* 3、確定view的位置 ,view自身有一些建議權,決定權在 父view手中。 onlayout();
* 4、繪製 view 的內容 。 ondraw(canvas)
*/
/*** 測量尺寸時的**方法
*/@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec) catch (exception e) }
@override
/*** 繪製當前view的內容
*/protected void ondraw(canvas canvas)
@override
/*** onclick 事件在view.ontouchevent 中被解析。
* 系統對onclick 事件的解析,過於簡陋,只要有down 事件 up 事件,系統即認為 發生了click 事件
* */
public void onclick(view v) }
/*** down 事件時的x值
*/private int firstx;
/*** touch 事件的上乙個x值
*/private int lastx;
@override
public boolean ontouchevent(motionevent event)
//計算 手指在螢幕上移動的距離
int dis = (int) (event.getx() - lastx);
//將本次的位置 設定給lastx
lastx = (int) event.getx();
//根據手指移動的距離,改變slidebtn_left 的值
slidebtn_left = slidebtn_left+dis;
break;
case motionevent.action_up:
//在發生拖動的情況下,根據最後的位置,判斷當前開關的狀態
if (isdrag) else
flushstate();
}break;
} flushview();
return true;
} /**
* 重新整理當前狀態
*/private void flushstate() else
mtoggleswitch.openorclose(currstate);
flushview(); }
/*** 重新整理當前視力
*/private void flushview() else
}});
使用ToggleButton按鈕實現開關效果
android ischecked true android texton 開 android textoff 關 開與關的內容自己可以設定成適用的不同內容。一 編寫布局檔案。新增togglebutton與imageview控制項。如下 二 在activity中實現邏輯部分。請看 以上的內容即可完成...
開關按鈕Switch
思路 自定義view,重寫和封裝好方法,外部直接呼叫 三個構造方法 onmeasure onlayout ondraw 重寫這些方法,實現自定義控制項 測量 在這個方法裡指定自己的寬高 布局 擺放 繪製內容 觸控事件ontouchevent motionevent event 封裝自定義方法 狀態更...
QT自繪滑動開關按鈕
1 使用滑鼠妥當滑塊,拖到左邊為 關 拖到右邊為 開 2 釋放滑鼠時判斷開關,並發射開 關狀態訊號。3 關狀態時滑塊為黑色,拖動狀態時為紅色,開狀態時滑塊為藍色。二 類的封裝 ifndef switchbutton h define switchbutton h include include in...