通过GestureDetector实现左划
继承GestureDetector.OnGestureListener
public class SlideLeftLayout extends FrameLayout implements GestureDetector.OnGestureListener
...
在SlideLeftLayout的dispatchTouchEvent方法中实例化GestureDetector
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (gestureDetector == null) {
gestureDetector = new GestureDetector(getContext(), this);
gestureDetector.setIsLongpressEnabled(false);
}
gestureDetector.onTouchEvent(ev);
return super.dispatchTouchEvent(ev);
}
实例化后, 每次在该方法中用gestureDetector.onTouchEvent(ev)处理触摸事件
在方法onScroll中控制子View linearLayout的滑动
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
// 如果左侧滑动distanceX为正数, 起始点减去终点
int currentX = (int) linearLayout.getX();
newX = currentX - distanceX;
Log.e(TAG, "newX = " + newX);
if (newX < -extraWidth) {
newX = -extraWidth;
}
if (newX > 0) {
newX = 0;
}
linearLayout.setX(newX);
return false;
}
在方法onTouchEvent中处理抬起动作
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d(TAG, "onTouch");
if (event.getAction() == MotionEvent.ACTION_UP) {
Log.d(TAG, "onTouch ACTION_UP");
if (newX <= (-extraWidth / 2)) {
linearLayout.setX(-extraWidth);
} else {
linearLayout.setX(0);
}
}
return true;
}
完整代码 SlideLeftLayout
Demo下载 CustomLayoutDemo