ToggleButton 选择关闭按钮

 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);
   
}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值