Here is a fully working example of Canvas & TextureView: http://pastebin.com/J4uDgrZ8
On Wed, Oct 3, 2012 at 3:01 PM, Romain Guy <[email protected]> wrote: > The problem is that you are calling updateTexImage() yourself. Do > *not* do this. You are interfering with TextureView, preventing it > from receiving the events that it uses to refresh the screen. > > On Tue, Oct 2, 2012 at 7:40 AM, Conrad Chapman <[email protected]> > wrote: >> Also asked in StackOverflow here >> http://stackoverflow.com/questions/12688409/android-textureview-canvas-drawing-problems >> >> I have an app that used SurfaceView to draw dynamic 2D graphs. It worked ok >> but transormations etc as we know are not supported. So I went to >> TextureView. My old code used another class/thread to do the drawing via the >> Surfaceholder.lockCanvas(); So I changed this to TextureView.lockcanvas. >> When this runs the canvas is not accelerated (the view is). It does not >> display initially but if I touch the screen it displays??? The touch is >> handled by the main activity. >> >> Obviously it works as it will display eventually but why doesn't it display >> immediately? >> >> The TextureView class implements SurfaceTextureListener as such below. >> @Override >> public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, >> int height) { >> // TODO Auto-generated method stub >> isRunning = true; >> mySurface = surface; >> mChart.setTextureSurface(surface); >> mChart.setSurfaceSize(width, height); >> mPaint.setColor(ZOOM_BUTTONS_COLOR); >> //mySurface.setOnFrameAvailableListener(frameready); >> mChart.Redraw(true); >> } >> @Override >> public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { >> // TODO Auto-generated method stub >> isRunning = false; >> return false; >> } >> this block below also workswhen manipluating the view later on (pan and >> zoom) >> public void Render(Bitmap buffmap){ >> //mCanvas = null; >> post(new Runnable() { >> public void run() { >> invalidate(); >> mySurface.updateTexImage(); >> } >> }); >> >> >> The drawing from the worker thread/class is >> protected void RenderCanvas(){ >> //mCanvas = null; >> Canvas c = null; >> //synchronized (mCanvas) { >> //mCanvas = null; >> try { >> c = mChartView.lockCanvas(null); >> >> synchronized (mCanvas) { >> c.drawBitmap(buffBitmap, 0, 0, null); >> >> } >> } finally { >> if (c != null) { >> mChartView.unlockCanvasAndPost(c); >> } >> } >> mChartView.Render(null); >> } >> >> Can I work like this? Non-GL content in a TextureView? >> Please help desperate for an answer. >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to [email protected] >> To unsubscribe from this group, send email to >> [email protected] >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en > > > > -- > Romain Guy > Android framework engineer > [email protected] -- Romain Guy Android framework engineer [email protected] -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

