Android Zoom一段时间后没有响应?

时间:2014-03-21 07:02:27

标签: android draw surfaceview

我正在开发一个应用程序,我将触摸侦听器应用到我的布局视图中。我在屏幕上移动布局,但布局在10到15秒后响应不好。这是我的代码:

base = (LinearLayout) findViewById(R.id.load);

    base.setOnTouchListener(new OnTouchListener() {                         
        @Override
        public boolean onTouch(View v, final MotionEvent event) {                                     

              int motion = event.getAction();
              int numberOfPointers = event.getPointerCount();
             if (numberOfPointers < 3) {
                     switch (motion & MotionEvent.ACTION_MASK) {

                     case MotionEvent.ACTION_DOWN:                          
                            drag = true;                                                                                           
                     break;

                     case MotionEvent.ACTION_POINTER_DOWN: {
                            drag = false;
                            if (drawWaveForm != null) {
                                   zoom = true;
                            }
                            // initial x1 and x2
                            BitmapDetector.prevX1 = Math.min(event.getX(0), event.getX(1));
                            BitmapDetector.prevX2 = Math.max(event.getX(0), event.getX(1));
                            BitmapDetector.prevY1 = event.getY(0);
                            BitmapDetector.prevY2 = event.getY(1);
                     }
                     break;

                     case MotionEvent.ACTION_MOVE:
                         if (drag && event.getActionIndex() == 0) {
                             // Log.d("detecting","inside the action move");
                             if (touching == false) {
                                 touching = detector.isWaveformAnchor(event.getX(0), event.getY(0));
                             } else if (touching == true) {
                                 float diff = event.getY(0) - loadWaveFormManager.getCh1_pos();
                                 if ((loadWaveFormManager.getCh1_pos() + diff) < (StaticValues.screenHeight - 50)) {
                                     int tempCh1_pos = (int) (loadWaveFormManager.getCh1_pos() + diff);
                                     loadWaveFormManager.setCh1_pos(tempCh1_pos);
                                 }
                                 drawWaveForm.update(loadWaveFormManager);
                             }
                         }
                         break;

                     case MotionEvent.ACTION_UP:
                            // Log.d("detecting","inside the action up");
                            drag = false;
                            touching = false;
                            zoom = false;

                            break;

                     case MotionEvent.ACTION_POINTER_UP:   
                     // here different function                          

             return;        
        }
 });    

有没有人对此有任何想法?请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

从您的代码中不清楚您的问题是什么以及何时发生。我没有看到任何TimerTaskAsyncTask引用。

我想,你试图在UI线程中做一些昂贵的操作,这会冻结你的应用程序。可能的长期候选人是drawWaveForm.update(loadWaveFormManager)

如果是这样,您应该异步执行计算,然后才更新UI。

顺便说一句,您的代码根本无法编译:

public boolean onTouch(View v, final MotionEvent event)

应返回 true false ,而不是在此方法结束时执行return;。这导致了一个假设,即您在问题中提供了不相关的代码,但仍希望收到相关答案。

提供相关代码片段以供进一步分析。

答案 1 :(得分:0)

  

目前,您正在启动线程触摸事件使用处理程序   线程