Android 列表侧滑(删除)菜单

under Android  tag     Published on October 29th , 2020 at 08:55 am

自定义implements GestureDetector.OnGestureListener的类,重写onScroll

在这里有个要注意的地方,就是onDown的返回值,如果你设为false,经测试,它就一直只执行onDown-onShowPress-onLongPress;其他的并不会执行。
如果设为true,则正常。

public class Listener implements GestureDetector.OnGestureListener {
    private View view;
    private int ux;
    private String TAG = "TAG";

    public Listener(View view) {
        this.view = view;
        View layout = view.findViewById(R.id.user_layout);
        ux = layout.getLayoutParams().width;
        layout.setVisibility(View.VISIBLE);
        view.setPadding(0, 0, -ux, 0);
    }

    @Override
    public boolean onDown(MotionEvent motionEvent) {
//        在这里有个要注意的地方,就是onDown的返回值,如果你设为false,经测试,它就一直只执行onDown-onShowPress-onLongPress;其他的并不会执行。
//        如果设为true,则正常。
        return true;
    }

    @Override
    public void onShowPress(MotionEvent motionEvent) {
    }

    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        int open = (int) (motionEvent.getX() - motionEvent1.getX());
        if (open > ux) {
            view.setPadding(-ux, 0, 0, 0);
        }
        
        int close = (int) (motionEvent1.getX() - motionEvent.getX());
        if (close > ux) {
            view.setPadding(0, 0, 0, 0);
        }

        Log.i(TAG, "onScroll: " + open + "," + close);
        return false;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        return false;
    }
}

适配器中使用,给convertView设置监听事件。

        final GestureDetector detector = new GestureDetector(context, new Listener(convertView));
        convertView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return detector.onTouchEvent(event);
            }
        });

本文由 surface 创作,采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:November 10th , 2020 at 09:00 am
分享到:Twitter  Weibo  Facebook