###Android 左右滑动自定义控件
public class SlideButton extends View {
private Bitmap mBackgroundBitmap;
private Bitmap mSlideBitmap;
private Paint mPaint;
private float mStartX;
private int mDx;
public SlideButton(Context context) {
super(context);
init(context);
}
public SlideButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
mBackgroundBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.background);
mSlideBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.slide_button);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mDx = 0;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
switch (widthMode) {
case MeasureSpec.UNSPECIFIED:
break;
case MeasureSpec.AT_MOST:
widthSize = mBackgroundBitmap.getWidth();
break;
case MeasureSpec.EXACTLY:
break;
}
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
switch (widthMode) {
case MeasureSpec.UNSPECIFIED:
break;
case MeasureSpec.AT_MOST:
heightSize = mBackgroundBitmap.getHeight();
break;
case MeasureSpec.EXACTLY:
break;
}
// 设置当前控件测量的尺寸
setMeasureDimension(widthSize, heightSize);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(mBackgroundBitmap, 0, 0, mPaint);
if (mDx < 0) {
mDx = 0;
}
if (mDx > getMeasuredWidth() - mSlideBitmap.getWidth()) {
mDx = getMeasuredWidth() - mSlideBitmap.getWidth();
}
canvas.drawBitmap(mSlideBitmap, mDx, 0, mPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
mStart = event.getX();
break;
case MotionEvent.ACTION_MOVE:
float endX = event.getX();
mDx = (int) (endX - mStartX);
break;
case MotionEvent.ACTION_UP:
int backgroundCenterPosition = getMeasuredWidth() / 2;
int slideCenterPosition = mDx + mSlideBitmap.getWidth() / 2;
if (slideCenterPosition < backgroundCenterPosition) {
mDx = 0;
} else {
mDx = getMeasuredWidth() - mSlideBitmap.getWidth();
}
break;
}
invalidate();
return true;
}
}