togglebut1 = (ToggleButton) findViewById(R.id.togglebut1);
togglebut1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
}
}
});
2
mytogglebutton =(MyToggleButton) findViewById(R.id.my_togglebut);//可滑动
mytogglebutton.setOnToggleStateChangeListener(new OnToggleStateChangeListener() {
@Override
public void onToggleStateChange(Boolean state) {
if(state){
}else{
}
}
});
1自定义设置图片
<ToggleButton
android:id="@+id/togglebut1"android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/toggle_selector"
android:textOn=""
android:textOff=""
android:checked="true"
/>
2 自定义划定选择
<com.example.handwriting.MyToggleButton
android:id="@+id/my_togglebut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:textOn=""
android:textOff=""
/>
-------
public class MyToggleButton extends ToggleButton{
private Bitmap toggle_bkg_on;//滑动開背景图片
private Bitmap toggle_bkg_off;
private Bitmap toggle_slip; //滑动块的图片
private Boolean isSliding = false;//滑动状态,false为未滑动状态
private Boolean toggleState=true;//ToggleButton的状态
private float currentX;//手指滑动的距离
private OnToggleStateChangeListener listener;//声明OnToggleStateChangeListener接口变量
/*
* 根据拖动位置绘制图像
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//如果移动距离小于背景一般,绘制关闭按钮背景,否则绘制打开按钮背景
if (currentX <toggle_bkg_off.getWidth()/2){
canvas.drawBitmap(toggle_bkg_off, 0, 0, null);
}else{
canvas.drawBitmap(toggle_bkg_on, 0, 0, null);
}
float slip_left = 0;
if(isSliding){
if(currentX > toggle_bkg_off.getWidth()-toggle_slip.getWidth()){
slip_left = toggle_bkg_off.getWidth()-toggle_slip.getWidth();
canvas.drawBitmap(toggle_slip, slip_left, 0,null);
}else{
slip_left = currentX - toggle_slip.getWidth()/2;
canvas.drawBitmap(toggle_slip, slip_left, 0,null);
}
}else{
if(toggleState){
slip_left =toggle_bkg_off.getWidth() - toggle_slip.getWidth();
canvas.drawBitmap(toggle_slip, slip_left, 0,null);
}else{
canvas.drawBitmap(toggle_slip, 0, 0,null);
}
}
//滑出左边界
if(currentX < 0){
canvas.drawBitmap(toggle_slip, 0, 0,null);
}
//滑出右边界
if (currentX > toggle_bkg_off.getWidth()-toggle_slip.getWidth()){
slip_left = toggle_bkg_off.getWidth()-toggle_slip.getWidth();
canvas.drawBitmap(toggle_slip, slip_left, 0,null);
}
}
/*
* 继承view触摸事件方法并实现逻辑
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取滑动距离
currentX = (int) event.getX();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
//滑动状态改成true
currentX = event.getX();
isSliding=true;
break;
case MotionEvent.ACTION_MOVE://移动
currentX = event.getX();
break;
case MotionEvent.ACTION_UP:
//滑动状态改成false
isSliding=false;
//如果滑动距离大于背景的1/2将开关打开,小于1/2将开关关闭
if(currentX < toggle_bkg_off.getWidth()/2){
//检测原来的开关状态是否为开,如果是开则关闭它
if(toggleState){
//关闭ToggleButton
toggleState = false;
//检测是否注册监听器,如果没有则注册
if(listener != null){
listener.onToggleStateChange(toggleState);
}
}
}else{
if(!toggleState){
toggleState = true;
//检测是否注册监听器,如果没有则注册
if(listener !=null){
listener.onToggleStateChange(toggleState);
}
}
}
break;
}
//在onTouchEvent事件完成后重新调用onDraw绘制图形
invalidate();
//返回true表示操作完毕
return true;
}
/*
*实现设置状态改变监听方法
*/
public void setOnToggleStateChangeListener(OnToggleStateChangeListener listener){
this.listener=listener;
}
/**
* 定义一个ToggleButton状态改变监听器接口
*/
interface OnToggleStateChangeListener{
void onToggleStateChange(Boolean state);
}
/*帶3個參數構造方法,在xml中應用是可以指定樣式和屬性
* context:上下文
*AttributeSet:属性值集合
*defStyleAttr:Theme下默认的Style
*/
public MyToggleButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setdraw();
}
/*
* 帶2個參數構造方法,在xml中使用時可以指定屬性
*/
public MyToggleButton(Context context, AttributeSet attrs) {
super(context, attrs);
setdraw();
}
/*
* 帶1個參數構造方法
*/
public MyToggleButton(Context context) {
super(context);
setdraw();
}
public void setdraw() {
toggle_bkg_off = BitmapFactory.decodeResource(getResources(), R.drawable.back);
toggleState = false;
toggle_slip = BitmapFactory.decodeResource(getResources(), R.drawable.kuai);
toggle_bkg_on = BitmapFactory.decodeResource(getResources(), R.drawable.back);
}
}