Android 左右滑动自定义控件

public class SlideButton extends View {    private Bitmap mBackgroundBitmap;    private Bitmap mSlideBitmap;    private Paint mPaint;    private float mStart;    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 + mSlideButton.getWidth() / 2;                if (slideCenterPosition < backgroundCenterPosition) {                    mDx = 0;                } else {                    mDx = getMeasuredWidth() - mSlideButton.getWidth();                }                break;        }        invalidate();        return true;    }}

更多相关文章

  1. android里的ViewGroup
  2. android EditText 控件中加入图片(非背景图片)
  3. Android中在OnCreate时获得控件高度
  4. android 通过代码创建页面组件
  5. 2011.06.08——— android 1.6 launcher研究之launcher的左右滑
  6. android滑动改变状态栏颜色及透明度
  7. android scrollview组件禁止滑动的方法
  8. android中MotionEvent.ACTION_CANCEL事件如何被触发?
  9. Android(安卓)Design Support Library学习

随机推荐

  1. 课堂小结
  2. Android系统启动顺序(按下power键后所做
  3. 3G应用开发之Android(安卓)传智播客 基础
  4. 移动平台Dialog内按键顺序研究
  5. android MapView 定位与Overlay onTap事
  6. Android找到本地联络人并向其发邮件
  7. Android studio中Git的学习和使用心得(二)
  8. Android ndk开发 打包成apk后 找不到modu
  9. 【Android】Android的消息机制
  10. [Android问答] 开发环境问题集锦