Ended a touch event which was not counted in trackedTouchCount (ReactNative RN开发时多点触摸滑动报错)

本文介绍了一种解决ReactNative应用中多点触控导致的EndedatoucheventwhichwasnotcountedintrackedTouchCount错误的方法。通过禁用多点触摸事件并重写ReactActivity的dispatchTouchEvent方法,可以有效避免此问题,同时不影响基本的手势操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进行React Native开发app时,如果在 ReactActivity 的子类所在页面,多个(三个以上)手指同时滑动时,会报出以下错误:

"Ended a touch event which was not counted in trackedTouchCount"

我们通过对提示的分析,可以猜到应该是多点触摸造成的问题,在网上搜了半天,很多人说是ReactNative 框架本身的bug

可以通过修改RN的源码解决。

可是如果页面上不需要太多手势操作的话,可以通过禁用多点触摸的事件来解决这个问题。了解View事件分发机制的同学都知道,

事件都是从Activity的dispatchTouchEvent进行分发的,那么我们就从这里入手进行尝试解决,我们把当前页面用到的基本的点击、滑动事件之外的事件都拦截掉,就可以了。经过尝试完全可以,还不影响其它功能,只需要重写ReactActivity的 dispatchTouchEvent事件即可,具体代码如下:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    switch (ev.getAction()){
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_UP:
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_SCROLL:
            super.dispatchTouchEvent(ev);
            return false;
    }
    return true;
}

 

### 实现多点触摸功能 在Unity中实现多点触摸主要依赖于`Input`类中的几个关键属性和方法[^3]。对于基本的多点触控操作,可以利用`Input.touchCount`来判断当前有多少个手指正在屏幕上接触,并通过遍历`Input.touches`数组访问每一个触碰的具体信息。 下面是一个简单的例子展示如何检测并响应两个不同位置的同点击: ```csharp void Update() { if (Input.touchCount >= 2) // 至少有两个触点执行逻辑 { foreach (Touch touch in Input.touches) { Debug.Log($"Finger {touch.fingerId} at position ({touch.position.x}, {touch.position.y})"); switch(touch.phase){ case TouchPhase.Began: Debug.Log("Touch began."); break; case TouchPhase.Moved: Debug.Log("Touch moved."); break; case TouchPhase.Stationary: Debug.Log("Touch stationary."); break; case TouchPhase.Ended: Debug.Log("Touch ended."); break; case TouchPhase.Canceled: Debug.Log("Touch canceled."); break; } } // 可在此处处理双指或多指手势,比如缩放、旋转等复杂交互 } } ``` 此代码片段展示了当存在至少两个触点打印出每个触点的位置以及它们的状态变化情况。这只是一个基础框架,在实际应用中可以根据需求进一步扩展,例如加入特定的手势识别算法或与其他组件配合完成更复杂的互动效果。 为了更好地管理和简化多点触摸的操作流程,还可以考虑使用第三方库如TouchScript[^1],它提供了更加高级的功能和服务,使得开发者能够更容易地创建基于触摸屏的应用程序界面。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值