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

Reply via email to