2011-08-23 3 views
1

나는 SurfaceView를 사용하려고 애쓰는 이상한 문제에 봉착했다. this one처럼 작동하지만 2 프레임 * 사이에서 계속 깜박입니다. 또한 unlockCanvasAndPost는 30-50M 정도 걸립니다. 정상입니까?Android - SurfaceView. 화면을 지우지 않고 업데이트 중입니다. (참고 : 나는 멍청이이다.)

매번 모든 것을 다시 그려 보는 것은 좋지 않습니다. 모든 프레임마다 350 도트를 다시 그려야한다고 생각하지 않습니다.

* 두 프레임 사이의 깜박임 : (X, X)에서 모든 프레임에 점을 그립니다. X는 프레임 번호입니다. 모든 장애 프레임을 보여주는 점 1,1,3,3,5,5,7,7,9,9와 모든 쌍 프레임을 나타내는 점 2,2,4,4,6,6,8,8가 보입니다.

Canvas C; 
    while(running) 
    { 

     synchronized (mSurfaceHolder) 
     { 
     DoCalc(); //Doesn't do anything special. changes vars X1 and Y1 
     C=mSurfaceHolder.lockCanvas(); 
     aDraw(C); // Only contains canvas.drawRect(X1-1, Y1-1, X1+1,Y1+1, P); 
     mSurfaceHolder.unlockCanvasAndPost(C); //Why does it take so long? 
     } 

    try {Thread.sleep(500);} //Temporary delay. 
    catch (InterruptedException e) {} 
    } 

답변

1

서피스 뷰 SurfaceView는 코드가 정상적으로 정확히 작동을 의미 모든 프레임을 교환하는 두 개의 버퍼를 가지고 : 여기

무 코드입니다.

캔버스를 사용하여 bimap에 그릴 필요가있는 모든 점을 다시 그리거나 프리뷰 당 프레임 당 두 개의 점을 그리고 표면 뷰에 현재 그리지 않으려면이 점을 선택하십시오.

+0

감사합니다. – Anon

+0

지금 시간을내어 봤습니다. 놀라운, 감사합니다. 그것은 정말로 잘 작동합니다. – Anon

+0

위대한 ... 속도에 관해서는, 보통 안드로이드 장치는 약 16Ms 초당 적어도 60 프레임을 할 수 있습니다. 에뮬레이터에서 실행하거나 페인트 P가 복잡하고 채우기의 비트 맵 텍스처 유형을 사용하지 않는 한, 코드가 sleep()을 제외하고는 느려야하는 이유를 볼 수 없습니다. – Lumis