OnDraw() is not fired, nothing is drawn in surfaceView - Android

前端 未结 1 813
灰色年华
灰色年华 2021-01-14 11:51

HI! I have a surfaceView inside a horizontal scrollview that I want to fill with images with a onDraw() call. However, nothing is drawn. I have a class in which the drawing

相关标签:
1条回答
  • 2021-01-14 12:27

    postInvalidate will not call onDraw with surfaceView. You need to unlock canvas, draw things and then lock canvas. Here is an example of a thread for surfaceView:

        class CanvasThread extends Thread {
            private SurfaceHolder surfaceHolder;
            private PanelChart panel;
            private boolean run = false;
    
            public CanvasThread(SurfaceHolder surfaceHolder, PanelChart panel) {
                this.surfaceHolder = surfaceHolder;
                this.panel = panel;
            }
    
            public void setRunning(boolean run) {
                this.run = run;
            }
    
            public SurfaceHolder getSurfaceHolder() {
                return surfaceHolder;
            }
    
            @Override
            public void run() {
                Canvas c;
                while (run) {
                    c = null;
    
                    //limit the frame rate to maximum 60 frames per second (16 miliseconds)
                    timeNow = System.currentTimeMillis();
                    timeDelta = timeNow - timePrevFrame;
                    if ( timeDelta < 16){
                        try{
                            Thread.sleep(16 - timeDelta);
                        }catch(InterruptedException e){
    
                        }
                    }
                    timePrevFrame = System.currentTimeMillis();
    
                    try {
                        c = surfaceHolder.lockCanvas(null);
                        synchronized (surfaceHolder) {
                            panel.onDraw(c); //draw canvas 
                            computePhysics(); //calculate next frame
                        }
                    } finally {
                        if (c != null) {
                            surfaceHolder.unlockCanvasAndPost(c);  //show canvas
                        }
                    }//try finally
                  } //while
            }//run
        }//thread
    
    0 讨论(0)
提交回复
热议问题