I've run into an issue where my OnTouchEvent is causing a
keyDispatchingTimedOut.

I've timed it via System.Environment.TickCount, and I'm spending ~32ms
handing it -- but, Android tells me that I've been handing an event for over
5 seconds.

The traces.txt file is no help.

Do I need to "spin the message loop" or something?  

I'm wondering if I'm blocking an event somehow, or if I need to add another
override to my Activity?


 
I/ TestApp (16439): Enter DoHandleEvent
I/TestApp  (16439): Exit DoHandleEvent - 32 milliseconds
D/AlarmManager(  299): Triggered Alarm 4099b6b8 ELAPSED_REALTIME_WAKEUP
IntentSender{4120d5d8: PendingIntentRecord{4099fb48 com.google.android.gsf
roadcastIntent}}
D/AlarmManager(  299): Added alarm Alarm{4149e420 type 2
com.google.android.gsf} type:ELAPSED_REALTIME_WAKEUP when: After 0h:1m:0.0s
D/AlarmManager(  299): Removed alarm Alarm{4149e420 type 2
com.google.android.gsf} type:ELAPSED_REALTIME_WAKEUP
D/AlarmManager(  299): Added alarm Alarm{41003da0 type 2
com.google.android.gsf} type:ELAPSED_REALTIME_WAKEUP when: After
0h:14m:59.0s
I/InputDispatcher(  299): Application is not responding: Window{4089b8c0
TestAppDroid.TestAppDroid/TestAppdroid.TestAppActivity paused=false}.
5004.6ms since event, 5004.2ms since wait started
I/Process (  299): Sending signal. PID: 16439 SIG: 3
I/dalvikvm(16439): threadid=4: reacting to signal 3
I/WindowManager(  299): Input event dispatching timed out sending to
TestAppDroid.TestAppDroid/TestAppdroid.TestAppActivity


    void DoHandleEvent(PaintingView view, float[] bbx)
        {            
            Log.Info("TestApp", "Enter DoHandleEvent");
            Int32 time = System.Environment.TickCount;

            view.SetBBX(bbx);
            view.Render();  // View is AndroidGameView - Render does what
you think it does
            time = System.Environment.TickCount - time;
            Log.Info("TestApp", "Exit DoHandleEvent - " + time.ToString() +
" milliseconds");
        }

    public override bool OnTouchEvent(MotionEvent e)
        {
            bool fRet = false;            
            try
            {
                switch ((int)e.Action)
                {
                    case MotionEvent.ActionPointer2Up:
                        mode = 0; // pan
                        fRet = true;
                        break;

                    case MotionEvent.ActionPointer2Down:
                        mode = 1; // zoom                    
                        distance = spacing(e);
                        fRet = true;
                        break;

                    case (int)MotionEventActions.Down:
                        mode = 0;
                        startX = e.RawX;
                        startY = e.RawY;
                        fRet = true;
                        break;

                    case (int)MotionEventActions.Move:
                        float x = e.RawX;
                        float y = e.RawY;
                        float scrollByX = x - startX;
                        float scrollByY = y - startY;
                        startX = x;
                        startY = y;

                        //  convert pixel to world
                        if (null != glView_)
                        {
                            if (0 == mode)
                            {
                                float pdx = (glView_.GetBBX()[2] -
glView_.GetBBX()[0]) / (float)glView_.Size.Width;
                                float pdy = (glView_.GetBBX()[3] -
glView_.GetBBX()[1]) / (float)glView_.Size.Height;

                                scrollByX *= pdx;
                                scrollByY *= pdy;

                                float[] arBBX = new float[4];
                                glView_.GetRequestBBX().CopyTo(arBBX, 0);
                                arBBX[0] -= scrollByX;
                                arBBX[1] += scrollByY;
                                arBBX[2] -= scrollByX;
                                arBBX[3] += scrollByY;
                              
                                DoHandleEvent(glView_, arBBX);
                            }
                            else
                            {
                                float newDistance = spacing(e);
                                if (Math.Abs(newDistance - distance) > 10.0)
                                {
                                    float dv = newDistance / distance;
                                    distance = newDistance;

                                    float[] arBBX = new float[4];
                                    glView_.GetRequestBBX(arBBX);

                                    float dx = arBBX[2] - arBBX[0];
                                    float dy = arBBX[3] - arBBX[1];

                                    dx = dx - (dx * dv);
                                    dy = dy - (dy * dv);

                                    arBBX[0] = arBBX[0] - dx;
                                    arBBX[1] = arBBX[1] - dy;
                                    arBBX[2] = arBBX[2] + dx;
                                    arBBX[3] = arBBX[3] + dy;
                                    
                                    DoHandleEvent(glView_, arBBX);
                                }
                            }
                        }                        
                        fRet = true;
                        break;
                }
            }
            catch (System.Exception ex)
            {
                Log.Info("TestApp", "OnTouchEvent: " + ex.Message);
            }
            finally
            {                
            }

            return fRet;
        }

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
Monodroid mailing list
Monodroid@lists.ximian.com

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to