• android 自定义滑动按钮


      第一接触公司项目就让我画页面,而且还涉及到我最讨厌的自定义view  但是没办法,讨厌也必须要做啊,经过百度上资源的查找,终于写出了一个滑动控件。废话不多说,上代码。

    package com.etong.cpms.widget;

    import com.etong.cpms.activity.R;

    import android.content.Context;  
    import android.graphics.Bitmap;  
    import android.graphics.BitmapFactory;  
    import android.graphics.Canvas;  
    import android.graphics.Color;
    import android.graphics.Matrix;  
    import android.graphics.Paint;  
    import android.util.AttributeSet;  
    import android.view.MotionEvent;  
    import android.view.View;  
    import android.view.View.OnTouchListener;

    public class WiperSwitch extends View implements OnTouchListener{  
        private Bitmap bg_on, bg_off, slipper_btn;  
        private String mOnText = "打开";
        private String mOffText = "关闭";
        /**
         * 按下时的x和当前的x
         */  
        private float downX, nowX;  
          
        /**
         * 记录用户是否在滑动
         */  
        private boolean onSlip = false;  
          
        /**
         * 当前的状态
         */  
        private boolean nowStatus = false;  
          
        /**
         * 监听接口
         */  
        private OnChangedListener listener;  
          
          
        public WiperSwitch(Context context) {  
            super(context);  
            init();  
        }  
     
        public WiperSwitch(Context context, AttributeSet attrs) {  
            super(context, attrs);  
            init();  
        }  
          
        public void init(){  
            //载入图片资源  
            bg_on = BitmapFactory.decodeResource(getResources(), R.drawable.switch_bkg_switch1);  
            bg_off = BitmapFactory.decodeResource(getResources(), R.drawable.switch_bkg_switch1);  
            slipper_btn = BitmapFactory.decodeResource(getResources(), R.drawable.switch_btn_slip1);  
            setOnTouchListener(this);  
        }  
          
        protected void onDraw(Canvas canvas) {  
            super.onDraw(canvas);  
            Matrix matrix = new Matrix();  
            Paint paint = new Paint();  
            float x = 0;  
              
            //根据nowX设置背景,开或者关状态  
            if (nowX < (bg_on.getWidth()/2)){  
                  canvas.drawBitmap(bg_off, matrix, paint);//画出关闭时的背景
                  paint.setColor(Color.WHITE);
                  paint.setFakeBoldText(true);
                  paint.setTextSize(40);
                  canvas.drawText(mOffText, (bg_off.getWidth()-slipper_btn.getWidth())/2, (bg_off.getHeight()+30)/2, paint);
            }else{  
                canvas.drawBitmap(bg_on, matrix, paint);//画出打开时的背景   
                canvas.drawBitmap(bg_on, matrix, paint);//画出打开时的背景   
                paint.setColor(Color.WHITE);
                paint.setFakeBoldText(true);
                paint.setTextSize(40);
                canvas.drawText(mOnText,(bg_on.getWidth()-slipper_btn.getWidth())/2, (bg_on.getHeight()+30)/2, paint);
            }  
              
            if (onSlip) {//是否是在滑动状态,    
                if(nowX >= bg_on.getWidth())//是否划出指定范围,不能让滑块跑到外头,必须做这个判断  
                    x = bg_on.getWidth() - slipper_btn.getWidth()/2;//减去滑块1/2的长度  
                else  
                    x = nowX - slipper_btn.getWidth()/2;  
            }else {  
                if(nowStatus){//根据当前的状态设置滑块的x值  
                    x = bg_on.getWidth() - slipper_btn.getWidth();  
                }else{  
                    x = 0;  
                }  
            }  
              
            //对滑块滑动进行异常处理,不能让滑块出界  
            if (x < 0 ){  
                x = 0;  
            }  
            else if(x > bg_on.getWidth() - slipper_btn.getWidth()){  
                x = bg_on.getWidth() - slipper_btn.getWidth();  
            }  
              
            //画出滑块  
            canvas.drawBitmap(slipper_btn, x , 0, paint);   
        }  
     
        @Override  
        public boolean onTouch(View v, MotionEvent event) {  
            switch(event.getAction()){  
            case MotionEvent.ACTION_DOWN:{  
                if (event.getX() > bg_off.getWidth() || event.getY() > bg_off.getHeight()){  
                    return false;  
                }else{  
                    onSlip = true;  
                    downX = event.getX();  
                    nowX = downX;  
                }  
                break;  
            }  
            case MotionEvent.ACTION_MOVE:{  
                nowX = event.getX();  
                break;  
            }  
            case MotionEvent.ACTION_UP:{  
                onSlip = false;  
                if(event.getX() >= (bg_on.getWidth()/2)){  
                    nowStatus = true;  
                    nowX = bg_on.getWidth() - slipper_btn.getWidth();  
                }else{  
                    nowStatus = false;  
                    nowX = 0;  
                }  
                  
                if(listener != null){  
                    listener.OnChanged(WiperSwitch.this, nowStatus);  
                }  
                break;  
            }  
            }  
            //刷新界面  
            invalidate();  
            return true;  
        }  
          
          
          
        /**
         * 为WiperSwitch设置一个监听,供外部调用的方法
         * @param listener
         */  
        public void setOnChangedListener(OnChangedListener listener){  
            this.listener = listener;  
        }  
          
        /**
         * 设置滑动开关的初始状态,供外部调用
         * @param checked
         */  
        public void setChecked(boolean checked){  
            if(checked){  
                nowX = bg_off.getWidth();  
            }else{  
                nowX = 0;
            }  
            nowStatus = checked;  
        }  
        /**
         * 回调接口
         * @author len
         *
         */  
        public interface OnChangedListener {  
            public void OnChanged(WiperSwitch wiperSwitch, boolean checkState);  
        }  
     
     

     

    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    solr schema.xml配置
    solrconfig.xml配置文件
    solr 使用edismax来控制评分
    solr 打分和排序机制(转载)
    VMware vCenter Converter Standalone使用,物理机转换虚拟机
    Windows server开机登录取消按ctrl+alt+delete组合键
    pycharm专业版2020.1.1版本最新亲测激活,其他版本也复用
    jmeter服务器监控和插件管理
    windows下安装navicat15破解,详解最全
    linux解压汉字文件是乱码
  • 原文地址:https://www.cnblogs.com/zhousen34/p/5150482.html
Copyright © 2020-2023  润新知