2011-09-14 8 views
0

어떻게 이런 일이 가능할지 모르지만 활동 A의 캔버스가 활동 B의 캔버스 상단에 나타납니다. 두 가지 활동은 항상 살아 있습니다. 활동 그룹). 하나의 활동에 대한 캔버스의 컨텐츠가 다른 활동 위에 표시 될 수도 있습니다. 내가 활동 A 또는 B 중 하나를 함께 할있을 때Android 캔버스 두 가지 활동 - 두 번째 캔버스에 그려진 내용

내가이 전화를하지만, 분명히 작동하지 않습니다 :

void clearPlayerCanvas() 
{ 
    runOnUiThread(new Runnable(){ 
     public void run() 
     { 

      Canvas canvas = null; 
      try 
      { 

       canvas = holder.lockCanvas(); 

       if (canvas == null) 
       { 
        System.out.println("Cannot lock canvas, skipping MJpeg frame"); 
        return; 
       } 


       canvas.drawColor(Color.BLACK); 


      } 
      finally 
      { 
       if (canvas != null) 
        holder.unlockCanvasAndPost(canvas); 


      } 
     } 
     }); 
} 

이 코드는 단순히 덮어 쓰기 (자사에 가정) 검은 색과 현재의 캔버스. 어쨌든, 나는이 검은 캔버스를 활동 b에서 보지 않아야합니다. 그러나 나는 그렇습니다. SurfaceHolder도 사용하고 있습니다.

답변

0

두 개의 활동을 동시에 실행해서는 안됩니다 (실제로는 할 수 있다고 생각하지 않습니다).

SurfaceView의 드로잉 드로잉을 ActivityA에 멈추지 않았습니다. 스레드는 Activity이 일시 중지 된 경우에도 계속 실행되므로 그랬다고 가정합니다.

+0

두 개의 서로 다른 활동을 생성하는 ActivityGroup이 있습니다. 여기에 대한 참조가있는보기가 있고 그 활동 그룹에서 this.addContentView (myView)를 수행합니다. 따라서 활동은 둘 다 ActivityGroup에서 실행됩니다. – spentak

+0

"스레드 중지"란 무엇입니까? SurfaceHolder.lockCanvas는 자체 스레드에서 내용을 관리해야합니다. SurfaceHolder.unlockCanvasAndPost()는 캔버스에 사용 된 모든 스레드를 종료해야합니다. 내가 더 이상 무엇을해야합니까? – spentak

+0

SurfaceHolders를 많이 사용하지는 않지만 이해하기 쉽습니다. lockCanvas와 unlockCanvas는 하나의 스레드 만 Canvas에 쓰도록하는 뮤텍스입니다. Canvas에 쓰는 두 개의 쓰레드가 있다면, 하나는 그리기를하고, 다른 하나는 Canvas가 잠기지 않게됩니다. 캔버스가 잠겨 있으면 액세스하려고하는 스레드는 잠금 해제 될 때까지 차단됩니다. – DeeV

관련 문제