Sencha Touch App 在多点触控/Android 时冻结

Posted

技术标签:

【中文标题】Sencha Touch App 在多点触控/Android 时冻结【英文标题】:Sencha Touch App freeze when multitouch / Android 【发布时间】:2013-02-20 13:02:36 【问题描述】:

我构建了一个 sencha touch (2.1.0) 应用程序,并在我的三星 Galaxy S2 (android 4.0.3) 上对其进行了测试。 一旦我使用 snecha cmd 的本机构建命令和另一个我用 phonegap 包装它。 当我用两根手指同时触摸屏幕时,我两次都卡住了。 我不能再按按钮或滚动了。

有没有人解决这个问题?

我还阅读了 Sencha 论坛 (http://www.sencha.com/forum/showthread.php?249581-Multi-touch-and-phonegap) 中的帖子,但这对我不起作用或者我做错了什么。

任何帮助都将不胜感激。

【问题讨论】:

Android logcat 通过 PhoneGap 运行时是否显示任何内容?这是否会导致应用程序完全冻结,需要强制退出?我以前见过很多,但它从来没有给我造成任何冻结。 是的,这是错误,logcat 在冻结时显示:“D/CordovaLog(12706): Uncaught TypeError: Cannot read property 'point' of undefined”捏出来,有时我不得不退出应用程序。 【参考方案1】:

我最近遇到了这个问题,并访问了您提到的 Sencha 论坛链接,并在我的代码中实现了它,实现了以下目标。 1. 加入修复程序后,应用程序将永远不会因为同时点击而冻结。 2. 在您之前同时点击了两个或更多点之后,您将不得不再次点击屏幕上的某个位置。

注意:这个问题只能在 android 4.0.x 和 Sencha 2.1 上重现。

非常感谢来自 Sencha 论坛的 TROELS在您的 app.js 中,将 if 条件放在您的 Ext.application 之外,如下所示


Ext.application(
    name:xyz
    requires:[abc]
    //other stuffs
    );

    if(Ext.os.is.Android && Ext.os.version.equals(4.0)) 

        Ext.define('app.overrides.TouchGesture', 
            override: 'Ext.event.publisher.TouchGesture',

            reset: function(e)
                if(Ext.os.version.equals(4.0) && this.currentTouchesCount > 0)
                    e.changedTouches = Ext.Object.getValues(this.currentTouches);
                    this.onTouchEnd(e);
                
            
        );


            window.orgPinchEndMethod = Ext.event.recognizer.Pinch.prototype.end;
            Ext.define('app.overrides.Pinch', 
            override: 'Ext.event.recognizer.Pinch',

            end: function(e)
            var wasTracking = this.isTracking,
            result = window.orgPinchEndMethod.apply(this, arguments);
            if(wasTracking)
                this._resetDetection(e);
            
            return result;
        ,

            _resetDetection: function(e)
                var tg = Ext.event.Dispatcher.getInstance().getPublishers().touchGesture;
                setTimeout(function()
                    tg.reset(e);
                , 0);
            
           );

     



【讨论】:

以上是关于Sencha Touch App 在多点触控/Android 时冻结的主要内容,如果未能解决你的问题,请参考以下文章

Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt768

WPF学习第十八章 多点触控输入

Sencha 触控面板 html 不可见

防止多点触控的 UIButton 触摸事件

gtkmm 多点触控设备无法识别 (Windows)

多点触控 TouchAction