I want to create an AsyncTask to post a canvas to a SurfaceView after a render process. But i was wondering how i can access the variables i give to the AsyncTask? So before i want to start rendering i have to get the Canvas and give it to my Render class. But this is not working:
public class MyAsyncTask extends AsyncTask<DrawingView, SurfaceHolder, Renderer>{
private Canvas cv = null;
@Override
protected void onPreExecute(){
this.cv = SurfaceHolder.lockCanvas(); //get canvas
}
@Override
protected Canvas doInBackground(Renderer...render){
render.canvas = this.cv; //give the canvas to the renderer
render.RenderOneStep(); //rendering
return render.DisplayResult(); //gives back a canvas
}
@Override
protected void onPostExecute(Canvas canvas){
this.SurfaceHolder.unlockCanvasAndPost(canvas); //post canvas back to surfaceHolder
this.DrawingView.postInvalidate(); //update SurfaceView
}
}
Is it possible to do what i want with a AsyncTask?
EDITED
MyAsyncTask now looks like this:
public class MyAsyncTask extends AsyncTask<Object,Void,Canvas>{
private DrawingView dView = null;
private SurfaceHolder holder = null;
@Override
protected Canvas doInBackground(Object...obj){
dView = (DrawingView)obj[0];
holder = (SurfaceHolder)obj[1];
Renderer renderer = (Renderer)obj[2];
Canvas cv = holder.lockCanvas();
renderer.canvas = cv;
renderer.RenderOneStep(); //rendering
return renderer.DisplayResult(); //returns a canvas
}
@Override
protected void onPostExecute(Canvas canvas){
holder.unlockCanvasAndPost(canvas);
dView.postInvalidate();
Log.e("Info-->", "Done!");
}
}
In my MainActivity i call this at the surfaceCreated Event:
Canvas cv = holder.lockCanvas();
this.render = new Renderer(new Scene(), cv, new Vector3D(0.0f, 0.0f, 10.0f), 4);
holder.unlockCanvasAndPost(cv);
new MyAsyncTask().execute(dView, holder, render);
But my View does not update if i run my app?