模仿QQ左划显示置顶, 标记, 删除

来源:互联网 发布:mysql数据库的触发器 编辑:程序博客网 时间:2024/06/05 11:20

通过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

原创粉丝点击