Guys, please tell me how to cause a redraw in this code, the invalid does not work, you need to redraw before each drawing and preferably in the drawing stream, here’s the code

public class DrawView extends SurfaceView implements SurfaceHolder.Callback { private DrawThread drawThread; public DrawView(Context context) { super(context); getHolder().addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { drawThread = new DrawThread(getHolder()); drawThread.setRunning(true); drawThread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true; drawThread.setRunning(false); while (retry) { try { drawThread.join(); retry = false; } catch (InterruptedException e) { } } } class DrawThread extends Thread { private boolean running = false; private SurfaceHolder surfaceHolder; Paint paint = new Paint(); public DrawThread(SurfaceHolder surfaceHolder) { this.surfaceHolder = surfaceHolder; paint.setColor(Color.CYAN); } public void setRunning(boolean running) { this.running = running; } @Override public void run() { Canvas canvas; while (running) { canvas = null; try { canvas = surfaceHolder.lockCanvas(null); if (canvas == null) continue; // canvas.drawColor(Color.GREEN); if (drawingRect) { canvas.drawRect(a1,a2,b+20,b1+20,paint); System.out.println("Risuem "+a1+" "+a2+" "+b+" "+b1); } } finally { if (canvas != null) { surfaceHolder.unlockCanvasAndPost(canvas); } } } } } } 

    1 answer 1

    There is a lot that you can ... and need to rewrite for correct operation. In order to simply draw the figure. It is enough to fix a little, in run, try this:

      @Override public void run() { Canvas canvas; while (running) { canvas = null; try { canvas = surfaceHolder.lockCanvas(null); if (canvas != null) canvas.drawRect(0, 0, 200, 200, paint); System.out.println("Risuem..."); } finally { if (canvas != null) { surfaceHolder.unlockCanvasAndPost(canvas); } } } } 

    In theory, in the upper left corner draw a square, 200x200px, color CYAN.