Android 左右滑动控件

###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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值