2011-08-21 6 views
0

FrameLayout에 두 개의 뷰를 만들고 초에 포커스를 요청했습니다. 활동 터치 이벤트를 시작하면 잠시 멈추고 내 GL보기로 이동합니다. 이것은 내가 생각하는 임의의 시간이 걸린다 (일반적으로 5-10 초). 거기에 이벤트 대기열을 플러시하는 방법?효율적인 방법으로 WindowManager에서 터치 포커스를 요청 하시겠습니까?

나는 GLSurfaceView를 가지고 있으며 위에 오버레이 SurfaceView를 그려야한다. SurfaceView는 GLSurfaceView 위에 그려져 야하지만 입력 이벤트는 OpenGL 표면에 전달되어야합니다. 이

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mGLView= new SFView(this); 
    mCanvas= new SFCanvas(this); 

    mLayout=new FrameLayout(this); 
    mLayout.addView(mCanvas); 
    mLayout.addView(mGLView); 

    setContentView(mLayout); 


    mGLView.post(new Runnable() { 
     public void run() { 
     while(mGLView.isFocused() == false) 
      { 
       mGLView.requestFocus(); 
      } 
     } 
    }); 
} 

, 내 활동 내 로그 캣은 다음과 같습니다.

KeyInputQueue  Enqueueing touch event1 
KeyInputQueue  Enqueueing touch event0 
KeyInputQueue  Enqueueing touch event1 
KeyInputQueue  Enqueueing touch event0 
KeyInputQueue  Enqueueing touch event1 
KeyInputQueue  Enqueueing touch event0 
.. 
WindowManager  Delivering pointer 1 > Window{com.myapplication/com.myapplication.activity} 
WindowManager  Delivering pointer 0 > Window{com.myapplication/com.myapplication.activity} 
WindowManager  Delivering pointer 1 > Window{com.myapplication/com.myapplication.activity} 
KeyInputQueue  Enqueueing touch event0 
WindowManager  Delivering pointer 0 > Window{com.myapplication/com.myapplication.activity} 
KeyInputQueue  Enqueueing touch event1 
WindowManager  Delivering pointer 1 > Window{com.myapplication/com.myapplication.activity} 
.. 

는 또한 하나의 requestFocus를()를 시도했습니다,하지만 같은 효과 응용 프로그램 활동이 시작 첫번째 초에서 무책임하게했다. 내가 어디서 잘못한거야? 모든 제안에 감사드립니다. 잘못된 설명과 제 언어에 대해 유감입니다. 나는 안드로이드 플랫폼 및이 사이트의 초보자입니다.

+0

나는 onTouchEvent()를 다시 구현했다.이 메소드는 두 뷰 모두 호출되지 않는다. – alimg

답변

0

나는 내가 한 실수를 발견했다. 뷰 생성자에서 리소스를로드하고 있습니다. 그것은 물건을하는 것에 안드로이드를 막고있었습니다. 리소스로드를 하위 스레드로 마이그레이션했으며 문제가 해결되었습니다.

관련 문제