在很多app中都会有滑动开关的应用场景,之前在自己的项目中也用到了,自定义了一个滑动开关,就叫SwitchButton吧。实现原理很简单,闲话不多说,直接上代码: public class SwitchButton extends View implements OnClickListener { private Bitmap mSwitchBottom, mSwitchThumb, mSwitchFrame, mSwitchMask; private float mCurrentX = 0; private float mCurrentY = 0; private boolean mSwitchOn = true;// 开关默认是开着的 private int mMoveLength;// 最大移动距离 private float mLastX = 0; private float mLastY = 0;// 第一次按下的有效区域 private Rect mDest = null;// 绘制的目标区域大小 private Rect mSrc = null;// 截取源图片的大小 private int mDeltX = 0;// 移动的x偏移量 private int mDeltY = 0;//移动的y偏移量 private Paint mPaint = null; private OnChangeListener mListener = null; private boolean mFlag = false; private MyDrawerLayout mdl; private MainScrollView msv; public SwitchButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public SwitchButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public SwitchButton(Context context) { this(context, null); } /** * 初始化相关资源 */ pu