Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Phonegap android surface View #130

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

ErmaIsabel
Copy link

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>

devgeeks and others added 2 commits October 31, 2013 20:29
Updated to follow the Cordova Plugin spec, so that it works with Plugman.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants