You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在onTouch方法中获取GestureDetector.onSingleTapConfirmed()的返回值?

如何在onTouch方法中获取GestureDetector.onSingleTapConfirmed()的返回值?

嘿,我来帮你搞定这个问题!你现在是想给Button绑定GestureDetector后,在OnTouchListener的onTouch方法里拿到onSingleTapConfirmed()的返回值对吧?其实通过一个成员变量来存储返回值就可以实现,下面是完整的代码示例和说明:

public class MainActivity extends AppCompatActivity {
    // 用来存储onSingleTapConfirmed的返回值
    private boolean singleTapHandled = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.btn);

        GestureDetector gd = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapConfirmed(MotionEvent e) {
                // 这里编写你的单击处理逻辑
                boolean isHandled = true; // 根据实际逻辑返回true或false,表示是否处理了该事件
                // 将返回值存入成员变量
                singleTapHandled = isHandled;
                return isHandled;
            }
        });

        btn.setOnTouchListener((v, event) -> {
            // 让GestureDetector处理当前触摸事件
            gd.onTouchEvent(event);
            
            // 选择在ACTION_UP阶段获取返回值,因为onSingleTapConfirmed会在触摸结束后确认单击
            if (event.getAction() == MotionEvent.ACTION_UP) {
                // 这里就拿到了onSingleTapConfirmed的返回值
                Log.d("MainActivity", "onSingleTapConfirmed返回结果: " + singleTapHandled);
                
                // 根据返回值做后续处理
                if (singleTapHandled) {
                    // 单击事件已被处理,执行对应逻辑
                } else {
                    // 单击事件未被处理,执行其他逻辑
                }
                // 重置变量,避免影响下一次触摸事件的判断
                singleTapHandled = false;
            }
            // 返回true表示当前View处理了触摸事件,可根据你的需求调整为false
            return true;
        });
    }
}

关键说明:

  • 我们定义了一个成员变量singleTapHandled,专门用来存储onSingleTapConfirmed()的返回值;
  • 在onSingleTapConfirmed()方法中,把处理结果赋值给这个成员变量;
  • 在onTouch方法里,先调用gd.onTouchEvent(event)让手势检测器处理触摸事件,然后在ACTION_UP阶段读取成员变量的值——因为onSingleTapConfirmed是系统确认这是一个单击(而非双击的第一次点击)后才会触发的,这个阶段能确保我们拿到有效的返回值;
  • 每次读取完返回值后记得重置变量,防止下一次触摸事件拿到旧的结果。

内容的提问来源于stack exchange,提问作者user7055721

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:04:55