2016-07-22 2 views
0

я получил следующий код:Android lockCanvas() возвращает холст на одном устройстве, а на другой возвращает нулевое значение

public void messageReceived(String message) { 
    ... 
    ... 
    synchronized (getHolder()) { 
     if(isCreated) { 
      Canvas canvas = getHolder().lockCanvas(); 
      if (canvas != null) { 
        draw(canvas); 
        getHolder().unlockCanvasAndPost(canvas); 
      } 
     } 
    } 
    ... 
    ... 
} 

Проблема заключается в следующем: на моем HTC Desire (Android 4.1.2) метод getHolder().lockCanvas() возвращается холст, который затем я использую для рисования на нем. НО на моем смартфоне друзей (Android 4.2.2) он возвращает null, поэтому я не могу рисовать на нем. Есть идеи?

EDIT Я изменил код немного просто чтобы быть уверенным:

synchronized (getHolder()) { 
    if(isCreated && !isLocked) { 
     Canvas canvas = getHolder().lockCanvas(); 
     isLocked = true; 
     if (canvas != null) { 
       draw(canvas); 
       getHolder().unlockCanvasAndPost(canvas); 
       isLocked = false; 
     } 
    } 
} 

isCreated и isLocked общественные статические булевы.

ответ

0

Я понял, я сделал публичное статическое свойство холста, и оно работает!

if(isCreated) { 
    synchronized (getHolder()) { 
     if(canvas == null) 
      canvas = getHolder().lockCanvas(); 
      if (canvas != null) { 
       draw(canvas); 
       getHolder().unlockCanvasAndPost(canvas); 
       canvas = null; 
      } 
     } 
} 
Смежные вопросы