Usually this is done via transparent views overlaid over your surface And remember - you can not overlapp 2 surfaces.
On Nov 4, 7:20 am, sapegas <[email protected]> wrote: > I'm trying to draw some primitives on SurfaceView Canvas, but I can't > do this. > I need to implement a VideoPlayer(SurfaceView) with ability to draw on > it(and save user's drawing in future). > Can I do this anyhow? Is it possible on Android? > When I starting the activity, I can hear the voice from the video > player and I can draw on Canvas, but could not combine it together! > There is my code (only drawing on player): > > public class CanvasDrawing extends Activity { > > private ArrayList<Path> _graphics = new ArrayList<Path>(); > private Paint mPaint; > private MediaPlayer mp; > > @Override > public void onCreate(Bundle savedInstanceState) { > super.onCreate(savedInstanceState); > //setContentView(R.layout.main); > setContentView(new DrawingPanel(this)); > Log.d("mytag", "1"); > mPaint = new Paint(); > mPaint.setDither(true); > mPaint.setAntiAlias(true); > mPaint.setColor(0xFFFFFF00); > mPaint.setStyle(Paint.Style.STROKE); > mPaint.setStrokeJoin(Paint.Join.ROUND); > mPaint.setStrokeCap(Paint.Cap.ROUND); > mPaint.setStrokeWidth(3); > Log.d("mytag", "2"); > } > > class DrawingPanel extends SurfaceView implements > SurfaceHolder.Callback { > private DrawingThread _thread; > private Path path; > > public DrawingPanel(Context context) { > super(context); > getHolder().addCallback(this); > // > getHolder().setType(SurfaceHolder.SURFACE_TYPE_NORMAL); > getHolder().setFixedSize(100, 100); > // > Log.d("mytag", "3"); > _thread = new DrawingThread(getHolder(), this); > Log.d("mytag", "4"); > } > > public boolean onTouchEvent(MotionEvent event) { > synchronized (_thread.getSurfaceHolder()) { > if(event.getAction() == MotionEvent.ACTION_DOWN){ > path = new Path(); > path.moveTo(event.getX(), event.getY()); > path.lineTo(event.getX(), event.getY()); > }else if(event.getAction() == MotionEvent.ACTION_MOVE){ > path.lineTo(event.getX(), event.getY()); > }else if(event.getAction() == MotionEvent.ACTION_UP){ > path.lineTo(event.getX(), event.getY()); > _graphics.add(path); > } > > return true; > } > } > > @Override > public void onDraw(Canvas canvas) { > for (Path path : _graphics) { > //canvas.drawPoint(graphic.x, graphic.y, > mPaint); > canvas.drawPath(path, mPaint); > } > } > > public void surfaceChanged(SurfaceHolder holder, int format, > int > width, > int > height) { > // TODO Auto-generated method stub > > } > > public void surfaceCreated(SurfaceHolder holder) { > // TODO Auto-generated method stub > mp = new MediaPlayer(); > mp.setDisplay(holder); > try { > mp.setDataSource("/data/test.3gp"); > mp.prepare(); > mp.start(); > Log.d("mytag", "5"); > } catch (IllegalArgumentException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } catch (IllegalStateException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } catch (IOException e) { > // TODO Auto-generated catch block > e.printStackTrace(); > } > // > _thread.setRunning(true); > _thread.start(); > Log.d("mytag", "6"); > } > > public void surfaceDestroyed(SurfaceHolder holder) { > // TODO Auto-generated method stub > mp.release(); > > boolean retry = true; > _thread.setRunning(false); > while (retry) { > try { > _thread.join(); > retry = false; > } catch (InterruptedException e) { > // we will try it again and again... > } > } > } > } > > class DrawingThread extends Thread { > private SurfaceHolder _surfaceHolder; > private DrawingPanel _panel; > private boolean _run = false; > > public DrawingThread(SurfaceHolder surfaceHolder, DrawingPanel > panel) { > _surfaceHolder = surfaceHolder; > _panel = panel; > } > > public void setRunning(boolean run) { > _run = run; > } > > public SurfaceHolder getSurfaceHolder() { > return _surfaceHolder; > } > > @Override > public void run() { > Canvas c; > while (_run) { > c = null; > try { > c = _surfaceHolder.lockCanvas(null); > synchronized (_surfaceHolder) { > _panel.onDraw(c); > } > } finally { > // do this in a finally so that if an exception is > thrown > // during the above, we don't leave the Surface in > an > // inconsistent state > if (c != null) { > _surfaceHolder.unlockCanvasAndPost(c); > } > } > } > } > } > > } > > Any ideas? > Thank You. -- 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

