安卓基础

安卓View自定义长按时长

2022-04-20  本文已影响0人  在岁月中远行

安卓系统自带了长按事件,setOnLongClickListener事件即可监听,但是有时候希望自定义这个时间,这时候就需要来定义这个长按事件了。

下面的代码定义一个阀值TOUCH_SLOP,在移动超过阀值和释放之后,会将runnable移除掉,长按时间也就不会触发了,安卓源码长按的原理也是如此。

下面贴上源代码:

public class LongPressViewextends androidx.appcompat.widget.AppCompatButton {

private float mLastX, mLastY;

    private RunnablemRunnable;

    private boolean isMove;

    private static final float TOUCH_SLOP =20;

    public LongPressView(Context context) {

super(context);

    }

public LongPressView(Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

        mRunnable =new Runnable() {

@Override

            public void run() {

performLongClick();

                Toast.makeText(context, "自定义长按时长5000毫秒", Toast.LENGTH_SHORT).show();

            }

};

    }

@Override

    public boolean onTouchEvent(MotionEvent event) {

float x = event.getX();

        float y = event.getY();

        switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

mLastX = x;

                mLastY = y;

                isMove =false;

                /**

* 第二个参数就是自定义长按时长

*/

                postDelayed(mRunnable, 5000);

break;

            case MotionEvent.ACTION_MOVE:

if (isMove) {

break;

                }

if (Math.abs((mLastX - event.getX())) >TOUCH_SLOP || Math.abs((mLastY - event.getY())) >TOUCH_SLOP) {

isMove =true;

                    removeCallbacks(mRunnable);

                }

break;

            case MotionEvent.ACTION_UP:

removeCallbacks(mRunnable);

break;

        }

return super.onTouchEvent(event);

    }

}

运行上面代码,我们长按5秒,便可执行长按我们的事件逻辑了。

上一篇 下一篇

猜你喜欢

热点阅读