1. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[android] Criação Síncrona de Android SurfaceView

Discussão em 'Mobile' iniciado por Stack, Outubro 21, 2024 às 21:12.

  1. Stack

    Stack Membro Participativo

    Criei uma subclassse de SurfaceView para abstrair operações de canvas, como drawBitmap (dentre outras), conforme mostrado abaixo:

    public class MyView extends SurfaceView {

    public MyView(Context c) {
    super(c);
    this.canvasHolder = this.getHolder();
    this.canvasHolder.addCallback(surfaceHolderCallback);
    }

    public void drawBitmap(Bitmap bitmap, float width, float height, Paint p) {
    canvas.drawBitmap(bitmap, width, height, p);
    }

    private SurfaceHolder.Callback surfaceHolderCallback = new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    canvas = holder.lockCanvas();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {}
    };

    public void flush() {
    this.canvasHolder.unlockCanvasAndPost(this.canvas);
    this.canvas = this.canvasHolder.lockCanvas();
    }


    A inicialização completa da SurfaceView depende do callback, na qual eu consigo acesso ao canvas que precisarei para manipular. De outra forma, eu recebo um NullpointerException na primeira chamada ao drawBitmap.

    O problema é que eu quero permitir o uso da classe de forma bem direta, como mostrado abaixo. Para tal, eu preciso abstrair todo esse mecanismo de inicialização com callback e garantir que o drawBitmap tem acesso a um canvas válido (not null).

    Alguma ideia de como fazer isso isso?

    MyView view = new MyView(getBaseContext());
    String source = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/abc.png";
    view.drawBitmap(BitmapFactory.decodeFile(source).copy(Bitmap.Config.ARGB_8888, true), 0, 0, null);
    view.flush();

    Continue reading...

Compartilhe esta Página