如何在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
相关产品推荐
相关产品推荐

