2016-08-28 2 views
0

Есть ли способ, которым я могу остановить метод draw, который вызывается автоматически.Stop Surface View from call draw Automtically

Что я делаю в данный момент:

public class GUI extends extends SurfaceView implements SurfaceHolder.Callback{ 

... 

public void render() { 
    SurfaceHolder surfaceHolder = getHolder(); 
    Canvas canvas = null; 
    try{ 
     canvas = surfaceHolder.lockCanvas(); 
     if (canvas != null) { 
      draw(canvas); 
     } 
    }finally { 
     if (canvas != null){ 
      surfaceHolder.unlockCanvasAndPost(canvas); 
     } 
    } 
} 

@Override 
public void draw(Canvas canvas){ 
... //things done with the canvas object 
} 
} 

public class Game extends AbstractGame { 

... 
@Override 
public void render(){ 
    this.graphicsPanel.render(); 
} 

Я хочу посмотреть только перерисовывать, когда я называю метод визуализации, я попытался установить willNotDraw (истинную) и ложную, но это не имеет никакого значения. Как я могу автоматически прекратить рисование поверхности, он, кажется, рисует в среднем 53-59 кадров в секунду, что отлично, но мне нужно, чтобы рендеринг выполнялся в конце, чтобы избежать столкновений с игровыми потоками/списками

+0

Пожалуйста, [обзор этого вопроса] (http://stackoverflow.com/questions/3527621/how-to-pause-and-resume-a-surfaceview-thread), чтобы узнать, разрешает ли он вашу проблему .... Как для ответа «Vijayaramanan», НИКОГДА не смешивайте нити, которые должны иметь разные области. Вы получите ошибки/исключения. При необходимости используйте Handlers для получения основного Looper и отправьте сообщения на другой Thread и методы perfom. Наконец, если вам понадобится один SurfaceView для начала/остановки рендеринга в заданное время, [переопределить onDraw()] (https://developer.android.com/training/custom-views/custom-drawing.html) этого сингла 'Object'. – Bonatti

ответ

-1
Handle the scenario with thread in surface view class 

On resume of the activity start the thread of the surface view with 
Thread th; 
boolean isthreadStarted=false; 
public void OnResume(){ 
isthreadStarted=true; 
th=new Thread (this); 
th.start(); 
} 
public void 0nPause(){ 
isthreadStarted=true; 
if (th!=null){ 
th.join(); 
} 
} 

IN the render method check for isthreadStarted as true then call the draw method 

render(){ 
if (isthreadStarted){ 
// call your draw method 
draw (canvas); 
} 
} 

from your activity call this surface view onPause method to stop the canvas draw in this view 
+0

Удаляет ли этот метод автоматический просмотр поверхности? –

+0

Да, дайте мне знать, если он не работает – Vijayaramanan

+0

setWillNotDraw (true) works –