package com.yuntongxun.ecdemo.common.view;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;import com.yuntongxun.ecdemo.R;/**  * Created by yangyang on 4/7/16.  * 滑动开关按钮  */ public class SwitchButton extends View implements View.OnClickListener{    private Bitmap switchgreen,switchbottom,switchbutton;    private Boolean state=true;    private float mcurrentx=0,mlastx=0,dexs=0,countx=0;//当前位置,最后一次位置,移动距离  private OnChangeListener mlistener;    private Paint paint;    public SwitchButton(Context context) {       this(context,null);    }    public SwitchButton(Context context, AttributeSet attrs) {        this(context, null, 0);    }    public SwitchButton(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    public Boolean getState() {        return state;    }    public void setState(Boolean state) {        this.state = state;    }    public void init(){        switchbottom= BitmapFactory.decodeResource(getResources(), R.drawable.switchbottom);        switchbutton=BitmapFactory.decodeResource(getResources(), R.drawable.switchbutton);        switchgreen=BitmapFactory.decodeResource(getResources(), R.drawable.switchgreen);        countx=switchbottom.getWidth()-switchbutton.getWidth();        setOnClickListener(this);        setOnTouchListener(new OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                return false;            }        });        paint=new Paint();    }    @Override    protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){        setMeasuredDimension(switchbottom.getWidth(), switchbottom.getHeight());    }    @Override    protected void onDraw(Canvas canvas){        if(state){            canvas.drawBitmap(switchgreen,0,0,null);           canvas.drawBitmap(switchbutton,0,0,null);        }else {            canvas.drawBitmap(switchbottom,0,0,null);            canvas.drawBitmap(switchbutton, countx, 0,null);        }    }    @Override    public boolean onTouchEvent(MotionEvent event) {        switch (event.getAction()){            case MotionEvent.ACTION_DOWN:                mlastx=event.getX();            case MotionEvent.ACTION_MOVE:                mcurrentx=event.getX();                dexs=mcurrentx-mlastx;                dexs+=dexs;                invalidate();                //return true;  case MotionEvent.ACTION_UP:               if(Math.abs(dexs)>switchbottom.getWidth()/2){                   state=!state;               }                    invalidate();            default:                break;        }        invalidate();        return super.onTouchEvent(event);    }    @Override    public void onClick(View v) {        //countx = state ?switchbottom.getWidth() - switchbutton.getWidth() : 0;  state = !state;        if(mlistener != null) {           mlistener.OnChange(this,state);        }        invalidate();    }    public void setOnChangeListener(OnChangeListener listener){        mlistener=listener;    }    public interface OnChangeListener {        public void OnChange(SwitchButton sb, Boolean state);    }}

更多相关文章

  1. RecyclerView 简单分页加载
  2. Android(安卓)AlertDialog 获取PositiveButton的控制权
  3. RecyclerView的canScrollVertically方法踩坑
  4. libgdx实例分析小记(一)
  5. Android日历周视图 可添加事件标记
  6. 禁止ViewPager左右滑动事件
  7. Android(安卓)带有删除按钮的EditText
  8. Android中实现可滑动的Tab的3种方式
  9. 【Android】第6章(3) AlertDialog(警告对话框)

随机推荐

  1. Ubuntu for Android:共享同一linux内核,运
  2. Android读取工程根目录下文件内容
  3. android的一些常识
  4. ant script to obfuscate android code
  5. 【Android-Emulator】Android模拟器介绍
  6. Android ListView理解
  7. 品尝Android(三)移动终端报表展示
  8. [置顶] android应用框架系列一,架构
  9. 【Android】Handler 关于 new Handler 的
  10. Android的桌面(Launcher)的定制