Android(安卓)左右滑动控件
16lz
2021-12-04
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; }}
更多相关文章
- android里的ViewGroup
- android EditText 控件中加入图片(非背景图片)
- Android中在OnCreate时获得控件高度
- android 通过代码创建页面组件
- 2011.06.08——— android 1.6 launcher研究之launcher的左右滑
- android滑动改变状态栏颜色及透明度
- android scrollview组件禁止滑动的方法
- android中MotionEvent.ACTION_CANCEL事件如何被触发?
- Android(安卓)Design Support Library学习