Andreas
Andreas

Reputation: 7550

How to update a SurfaceView?

I've extended SurfaceView and managed to draw it in an Activity. The Activity should be able to call a method on my SurfaceView that changes some parameter and redraws it. How can that update function be implemented?

This is my class:

public class MySurfaceView extends SurfaceView
                                    implements SurfaceHolder.Callback {

    private int circleRadius = 50;
    private SurfaceHolder sh;
    private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

    public MySurfaceView(Context context, AttributeSet as) {
        super(context,as);
        sh = getHolder();
        sh.addCallback(this);
        paint.setColor(Color.BLUE);
        paint.setStyle(Style.FILL);
    }
    public void surfaceCreated(SurfaceHolder holder) {
        Canvas canvas = sh.lockCanvas();
        canvas.drawColor(Color.BLACK);
        canvas.drawCircle(100, 200, circleRadius, paint);
        sh.unlockCanvasAndPost(canvas);
    }
    public void update( newRadius ) {
        circleRadius = newRadius;
        // What more?
    }
}

What should update contain to redraw everything? Does this have to do with surfaceChanged?

Upvotes: 6

Views: 9561

Answers (1)

Andreas
Andreas

Reputation: 7550

  • The update function should call invalidate() or postInvalidate() in order for the View to redraw.
  • Further, redrawing is disabled by default for SurfaceViews. Enable it by calling setWillNotDraw(false) in e.g. surfaceCreated.

Upvotes: 10

Related Questions