purplecabbage / phonegap-plugins

Plugins for use with PhoneGap.
972 stars 3.82k forks source link

Phonegap android surface View #130

Open ErmaIsabel opened 11 years ago

ErmaIsabel commented 11 years ago

I have a dobut iam successfully run a android native code for SurfaceView Over a camera Now i want it to Convert to Phonegap is It Possible.Please give Your Valuble comments Below Iam Giving the native Code...Plz Help Thanks

MainActivity

 package com.example.testcamera;

 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;

 import android.app.Activity;
 import android.content.pm.ActivityInfo;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.PixelFormat;
 import android.hardware.Camera;
 import android.hardware.Camera.PictureCallback;
 import android.hardware.Camera.ShutterCallback;
 import android.os.Bundle;
 import android.os.Environment;
 import android.util.Log;
 import android.view.Display;
 import android.view.LayoutInflater;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import android.view.View;
 import android.view.Window;
 import android.view.WindowManager;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.RelativeLayout.LayoutParams;

 public class MainActivity extends Activity implements SurfaceHolder.Callback
 {
   private Camera camera = null;
   private SurfaceView cameraSurfaceView = null;
   private SurfaceHolder cameraSurfaceHolder = null;
   private boolean previewing = false;

   private Display display = null;

    private static int wid = 0, hgt = 0;

    private LayoutInflater layoutInflater = null;
    private View cameraViewControl = null;
    private LayoutParams layoutParamsControl = null;

   private Button btnCapture = null;

@Override
  protected void onCreate(Bundle savedInstanceState) 
  {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

setRequestedOrientation(ActivityInfo.
                                     SCREEN_ORIENTATION_LANDSCAPE);

display = getWindowManager().getDefaultDisplay(); 
wid = display.getWidth();
hgt = display.getHeight();

getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
                     WindowManager.LayoutParams.FLAG_FULLSCREEN,
                     WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.activity_main);

cameraSurfaceView = (SurfaceView)
                                   findViewById(R.id.cameraSurfaceView);
cameraSurfaceHolder = cameraSurfaceView.getHolder();
cameraSurfaceHolder.addCallback(this);
cameraSurfaceHolder.setType(SurfaceHolder.
                                             SURFACE_TYPE_PUSH_BUFFERS);

layoutInflater = LayoutInflater.from(getBaseContext());
layoutParamsControl = new LayoutParams(
                                                    LayoutParams.FILL_PARENT,
                                                    LayoutParams.FILL_PARENT);

cameraViewControl = layoutInflater.inflate
                                               (R.layout.overlay, null);     
this.addContentView(cameraViewControl, layoutParamsControl);

cameraViewControl = layoutInflater.inflate
                                               (R.layout.vampireimage, null);     
this.addContentView(cameraViewControl, layoutParamsControl);

btnCapture = (Button)findViewById(R.id.btnCapture);
btnCapture.setOnClickListener(new OnClickListener() 
{   
  @Override
  public void onClick(View v) 
     {
     // TODO Auto-generated method stub
     camera.takePicture(cameraShutterCallback, 
                                   cameraPictureCallbackRaw,
                                   cameraPictureCallbackJpeg);
  }
});
 } 

ShutterCallback cameraShutterCallback = new ShutterCallback() 
  {  
  @Override
  public void onShutter() 
  {
  // TODO Auto-generated method stub   
   }
   };

PictureCallback cameraPictureCallbackRaw = new PictureCallback() 
{  
  @Override
    public void onPictureTaken(byte[] data, Camera camera) 
    {
    // TODO Auto-generated method stub   
  }
   };

  PictureCallback cameraPictureCallbackJpeg = new PictureCallback() 
   {  
  @Override
  public void onPictureTaken(byte[] data, Camera camera) 
    {
    // TODO Auto-generated method stub   
    Bitmap cameraBitmap = BitmapFactory.decodeByteArray
                                                              (data, 0, data.length);

  wid = cameraBitmap.getWidth();
  hgt = cameraBitmap.getHeight();

  Bitmap newImage = Bitmap.createBitmap
                                    (wid, hgt, Bitmap.Config.ARGB_8888);

  Canvas canvas = new Canvas(newImage);

  canvas.drawBitmap(cameraBitmap, 0f, 0f, null);

  File storagePath = new File(Environment.
                getExternalStorageDirectory() + "/Vampire Photos/"); 
  storagePath.mkdirs(); 

  File myImage = new File(storagePath,
                Long.toString(System.currentTimeMillis()) + ".jpg");

  try
  {
    FileOutputStream out = new FileOutputStream(myImage);
    newImage.compress(Bitmap.CompressFormat.JPEG, 80, out);

    out.flush();
    out.close();
  }
  catch(FileNotFoundException e)
  {
    Log.d("In Saving File", e + "");    
  }
  catch(IOException e)
  {
    Log.d("In Saving File", e + "");
  }

  camera.startPreview();

  newImage.recycle();
  newImage = null;

  cameraBitmap.recycle();
  cameraBitmap = null;
  }
   };

   @Override
    public void surfaceChanged(SurfaceHolder holder, 
                                   int format, int width, int height) 
   {
  // TODO Auto-generated method stub

  if(previewing)
  {
  camera.stopPreview();
  previewing = false;
}
  try 
  {
  Camera.Parameters parameters = camera.getParameters();
  parameters.setPreviewSize(360,420);
  parameters.setRotation(90);
  camera.setParameters(parameters);

  camera.setPreviewDisplay(cameraSurfaceHolder);
  camera.startPreview();
  previewing = true;
} 
catch (IOException e) 
  {
  // TODO Auto-generated catch block
  e.printStackTrace();  
 }
}

@Override
 public void surfaceCreated(SurfaceHolder holder) 
{
// TODO Auto-generated method stub
try
{
  camera = Camera.open();
}
catch(RuntimeException e)
{

}
}

  @Override
  public void surfaceDestroyed(SurfaceHolder holder) 
{
// TODO Auto-generated method stub
camera.stopPreview();
camera.release();
camera = null;
previewing = false;
}
}   

LAYOUTS

Main.xml

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:orientation="vertical"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent">

  <SurfaceView android:id="@+id/cameraSurfaceView"  
                android:layout_width="fill_parent" 
                android:layout_height="fill_parent"
                android:background="@drawable/frame"/>       

</LinearLayout>

Overlay.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:orientation="vertical"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:gravity="right">

    <Button
        android:id="@+id/btnCapture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10px"
        android:background="@drawable/click"
        android:gravity="center_vertical" />

</LinearLayout>