GestureDetector:是Android官方提供的手势识别组件,可以识别点击、双击、长按事件、拖动等等手势操作,这里我们借助GestureDetector支持View的滑动,并通过拓展代码支持长按拖动。
以下代码已经过测试可用,需要的可自行拷贝哈。
拖动
public class MoveView extends AppCompatButton {
private GestureDetector mGesture;
public MoveView(Context context) {
super(context);
}
public MoveView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MoveView(Context context, AttributeSet attrs) {
super(context, attrs);
mGesture = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
setTranslationX(getTranslationX() + e2.getX() - e1.getX());
setTranslationY(getTranslationY() + e2.getY() - e1.getY());
return true;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mGesture.onTouchEvent(event);
if (event.getAction() == MotionEvent.ACTION_UP) { // 自动归位
placeIconToSide();
}
return super.onTouchEvent(event);
}
/**
* 移动位置对齐右边
* 如需要判断对齐左右两边的,可以在onTouchEvent中记录ACTION_UP时的x,然后placeIconToSide中判断 2 * x > getScreenWidth() - width,
* -- true:setX(getScreenWidth() - width)
* -- fal