首页 > 解决方案 > Android 使用 OnTouch 检测 longClick 位置

问题描述

好吧,我的目标是检测长点击的位置,我很困惑从哪里开始,但我尝试使用 OnTouch,因为它有助于检测点击的位置,我试图使用计时器让它作为 longClick 运行,但它不会工作

clickableObject.setOnTouchListener(new View.OnTouchListener() {
            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if(motionEvent.getAction()==MotionEvent.ACTION_DOWN){
                    if(!hold)startTime=System.currentTimeMillis();
                }
                else if(motionEvent.getAction()==MotionEvent.ACTION_UP){
                    hold=false;
                }
                while(motionEvent.getAction()==MotionEvent.ACTION_DOWN&&System.currentTimeMillis()-startTime<=1500);
                if(System.currentTimeMillis()-startTime>1500)
                    Toast.makeText(context, "done", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
/*

就像我单击短按一样,它可以工作,我希望它只能在 longClick 上工作

标签: androidontouchlistener

解决方案


最后我找到了一个解决方案我在 OnTouch 中使用 longClick 侦听器创建了 onTouchListener 我只得到了位置

在 OnLongListener 我使用位置的值

@SuppressLint("ClickableViewAccessibility")
    public void getClickPositions(View clickableObject, final ClickPositions clickPositions){
        clickableObject.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if(motionEvent.getAction()==MotionEvent.ACTION_DOWN) {
                    if (clickPositions != null)
                        clickPositions.getLastCordination(motionEvent.getX(), motionEvent.getY());
                }
                return false;
            }
        });

    }

public interface ClickPositions{void getLastCordination(float left,float top);}

public void showImageOptions(final View clickableObject, final ClickPositions clickPositions) {
        getClickPositions(clickableObject, new ClickPositions() {
            @Override
            public void getLastCordination(float left, float top) {
                x = left;
                y = top;
            }
        });
        clickableObject.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                Toast.makeText(context, String.valueOf(x) + ",", Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }

然后我只调用函数 showImageOption


推荐阅读