Android पर कैमरा द्वारा उपयोग किए जाने वाले SurfaceView पर ओवरले कैसे आकर्षित करें?



0 Answers

surfaceCreated से setWillNotDraw(false) को कॉल करने का प्रयास setWillNotDraw(false) :

public void surfaceCreated(SurfaceHolder holder) {
    try {
        setWillNotDraw(false); 
        mycam.setPreviewDisplay(holder);
        mycam.startPreview();
    } catch (Exception e) {
        e.printStackTrace();
        Log.d(TAG,"Surface not created");
    }
}

@Override
protected void onDraw(Canvas canvas) {

    canvas.drawRect(area, rectanglePaint);
    Log.w(this.getClass().getName(), "On Draw Called");
}

और onTouchEvent से invalidate कॉलिंग:

public boolean onTouch(View v, MotionEvent event) {

    invalidate();
    return true;
}
Question

मेरे पास एक साधारण प्रोग्राम है जो Camera के पूर्वावलोकन को SurfaceView में SurfaceView । मैं जो करने की कोशिश कर रहा हूं वह onPreviewFrame विधि का उपयोग कर रहा है, जिसे हर बार एक नया फ्रेम SurfaceView में खींचा जाता है, ताकि invalidate विधि को निष्पादित करने के लिए SurfaceView विधि का आह्वान किया जा सके। वास्तव में, onDraw विधि का आह्वान किया जा रहा है, लेकिन वहां कुछ भी मुद्रित नहीं किया जा रहा है (मुझे लगता है कि कैमरा पूर्वावलोकन उस पाठ को ओवरराइट कर रहा है जिसे मैं आकर्षित करने की कोशिश कर रहा हूं)।

यह मेरे पास SurfaceView का एक सरल संस्करण है:

public class Superficie extends SurfaceView implements SurfaceHolder.Callback {
 SurfaceHolder mHolder;
 public Camera camera;
 Superficie(Context context) {
  super(context);
  mHolder = getHolder();
  mHolder.addCallback(this);
  mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 }
 public void surfaceCreated(final SurfaceHolder holder) {
  camera = Camera.open();
  try {
   camera.setPreviewDisplay(holder);
   camera.setPreviewCallback(new PreviewCallback() {
    public void onPreviewFrame(byte[] data, Camera arg1) {
     invalidar();
    }
   });
  } catch (IOException e) {}
 }
 public void invalidar(){
  invalidate();
 }
 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
  Camera.Parameters parameters = camera.getParameters();
  parameters.setPreviewSize(w, h);
  camera.setParameters(parameters);
  camera.startPreview();
 }
 @Override
 public void draw(Canvas canvas) {
  super.draw(canvas);
  // nothing gets drawn :(
  Paint p = new Paint(Color.RED);
  canvas.drawText("PREVIEW", canvas.getWidth() / 2,
    canvas.getHeight() / 2, p);
 }
}



Related