2012-04-23 147 views
3

一切正常,当我开始我的应用程序。但是当我进入下一个活动并返回SurfaceView时,它看起来像black。当我调试时,我可以看到需要在画布上绘制的线条,但没有显示出来。
这里是我的代码:恢复到SurfaceView显示黑屏

public class DrawView extends SurfaceView implements Runnable 
{ 

    Thread thread = null; 
    SurfaceHolder holder; 
    Bitmap background; 
    Canvas canvas; 
    Matrix matrixUP = new Matrix(); 
    Matrix matrixDOWN = new Matrix(); 
    boolean ok = false; 

    public DrawView(Context context) 
    { 
     super(context); 
     holder = getHolder(); 
    } 

    public void run() 
    { 
     while(ok) 
     { 
      if(!holder.getSurface().isValid()) 
      { 
       continue; 
      } 
      watch_hand = Bitmap.createScaledBitmap(watch_hand, width/4, height/6, false); 
      watch_hand_down = Bitmap.createScaledBitmap(watch_hand_down, width/4, height/6, false); 
      background = BitmapFactory.decodeResource(getResources(), R.drawable.needles); 
      background = Bitmap.createScaledBitmap(background, width, height/2+20, false); 
      canvas = holder.lockCanvas(); 
      matrixUP.setTranslate(CENTER_X - watch_hand.getWidth()/2, height/4 - watch_hand.getHeight() - 40); 
      matrixUP.preRotate((float) degreUP , watch_hand.getWidth()/2 , watch_hand.getHeight()-10); 

      matrixDOWN.setTranslate(CENTER_X - watch_hand_down.getWidth()/2, height/2 - watch_hand_down.getHeight() - 20); 
      matrixDOWN.preRotate((float) degreDOWN , watch_hand_down.getWidth()/2 , 10); 

      canvas.drawARGB(255, 255, 255, 255); 
      canvas.drawBitmap(background, 0, 0, null); 
      canvas.drawBitmap(watch_hand, matrixUP, null); 
      canvas.drawBitmap(watch_hand_down, matrixDOWN, null); 
      holder.unlockCanvasAndPost(canvas); 
     }   
    } 

    public void pause() 
    { 
     ok = false; 
     while(true) 
     { 
      try 
      { 
       thread.join(); 
      }catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 
      break; 
     } 
     thread = null; 
    } 

    public void resume() 
    { 
     ok = true; 
     thread = new Thread(this); 
     thread.start(); 
    }   
} 

当你看到我使用的是恢复和暂停功能。他们从onCreate被调用。 为什么会发生这种情况,我该如何解决这个问题?

谢谢!

+0

同样的事情发生在我的情况下,你可以分享的解决方案。 – 2013-03-23 13:33:10

回答

0

从表面视图所在活动的onResume()和onPause()方法调用表面视图(在您的情况下为DrawView)的resume()和pause()方法。你提到你是从onCreate()调用的。

这应该解决问题。

1

答案取决于你如何改变其他活动。

基本上,当活动暂停,停止或破坏时,您必须考虑如何存储表面的当前状态。

例如,您可以在您的活动中重载onSaveInstanceState以保存degreUP和degreDOWN(通过它们未在当前代码段中定义的方式)。并在onRestoreInstanceState中恢复它们。请参阅Saving Android Activity state using Save Instance State

+0

degreUP正在设置“onclick”。当我调试一切正常。 canvas.drawARGB(255,255,255,255)行不关联任何东西,但仍然没有显示。这是为什么? – roiberg 2012-04-23 09:41:43

+0

就像我说过的,真正的问题是你没有实现恢复你的应用程序的手段。 – 2012-04-23 09:43:38

+0

我建议阅读我发布的链接。 – 2012-04-23 09:43:56