照相保存以及移动窗口

拍照保存以及移动窗口
public class CameraPreview extends Activity  {
	private Preview mPreview;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// Hide the window title.
		requestWindowFeature(Window.FEATURE_NO_TITLE);

		// Create our Preview view and set it as the content of our activity.
		mPreview = new Preview(this,this);		
		setContentView(mPreview);
		mPreview.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(!mPreview.onProgress)
				mPreview.onClick();
			}
		});
	}

}

// ----------------------------------

class Preview extends SurfaceView implements SurfaceHolder.Callback {

	SurfaceHolder mHolder;
	Camera mCamera;
	Context CON; 
	Activity ACT;
	public boolean onProgress=false;
	Preview(Context context,Activity activity) {
		super(context);
		CON=context;
		ACT=activity;
		// Install a SurfaceHolder.Callback so we get notified when the
		// underlying surface is created and destroyed.
		mHolder = getHolder();
		mHolder.addCallback(this);
		mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
	}

	public void surfaceCreated(SurfaceHolder holder) {
		// The Surface has been created, acquire the camera and tell it where
		// to draw.
		mCamera = Camera.open();
		try {
			mCamera.setPreviewDisplay(holder);
		} catch (IOException exception) {
			mCamera.release();
			mCamera = null;
			// TODO: add more exception handling logic here
		}
	}

	public void surfaceDestroyed(SurfaceHolder holder) {
		// Surface will be destroyed when we return, so stop the preview.
		// Because the CameraDevice object is not a shared resource, it's very
		// important to release it when the activity is paused.
		mCamera.stopPreview();
		mCamera.release();
		mCamera = null;
	}

	private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
		final double ASPECT_TOLERANCE = 0.05;
		double targetRatio = (double) w / h;
		if (sizes == null)
			return null;

		Size optimalSize = null;
		double minDiff = Double.MAX_VALUE;

		int targetHeight = h;

		// Try to find an size match aspect ratio and size
		for (Size size : sizes) {
			double ratio = (double) size.width / size.height;
			if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
				continue;
			if (Math.abs(size.height - targetHeight) < minDiff) {
				optimalSize = size;
				minDiff = Math.abs(size.height - targetHeight);
			}
		}

		// Cannot find the one match the aspect ratio, ignore the requirement
		if (optimalSize == null) {
			minDiff = Double.MAX_VALUE;
			for (Size size : sizes) {
				if (Math.abs(size.height - targetHeight) < minDiff) {
					optimalSize = size;
					minDiff = Math.abs(size.height - targetHeight);
				}
			}
		}
		return optimalSize;
	}

	Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
		public void onPictureTaken(byte[] imageData, Camera c) {
			onProgress=true;
			if (imageData != null) {

				Intent mIntent = new Intent();
				try {
					FileOutputStream out = new FileOutputStream(
							"/sdcard/Deltio1.jpg");
					Bitmap e = BitmapFactory.decodeByteArray(imageData, 0,
							imageData.length);
					e.compress(Bitmap.CompressFormat.JPEG, 65, out);
					out.close();			
					Intent i = new Intent(ACT, MediaSend.class);
					ACT.startActivity(i);
					 
				
				} catch (Exception e) {
					Toast
					.makeText(
							CON,
							"Πρόβλημα στην αποθήκευση.Βεβαιωθείτε ότι έχετε sdcard εγκατεστημένη",
							Toast.LENGTH_LONG).show();
					ACT.finish();
				}
				
				// FileUtilities.StoreByteImage(mContext, imageData,
				// 50, "ImageName");								
				
				SystemClock.sleep(2000);
				mCamera.startPreview();
				
				onProgress=false;
				
				

				// setResult(FOTO_MODE,mIntent);
				// finish();

			}
		}
	};

	public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
		// Now that the size is known, set up the camera parameters and begin
		// the preview.
		Camera.Parameters parameters = mCamera.getParameters();		

		//List<Size> sizes = parameters.getSupportedPreviewSizes();
		//Size optimalSize = getOptimalPreviewSize(sizes, w, h);
		//parameters.setPreviewSize(optimalSize.width, optimalSize.height);
		parameters.setPreviewSize(w, h);
		//mCamera.setParameters(parameters);
		mCamera.startPreview();
	}

	public void onClick() {
		if(!onProgress)
		{onProgress=true;
		mCamera.takePicture(null, mPictureCallback, mPictureCallback);
    }
	}
	
}
<!-- Page not cached by WP Super Cache. No closing HTML tag. Check your theme. -->

 2.

public class CameraPreview extends Activity { 
protected static final String TAG = "CameraPreview"; 
private Preview mPreview; 
 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
 
    // Hide the window title. 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
 
    // Create our Preview view and set it as the content of our activity. 
    mPreview = new Preview(this); 
    mPreview.setId(100); 
    RelativeLayout mainLayout = new RelativeLayout(this); 
    RelativeLayout.LayoutParams mainLp = new RelativeLayout.LayoutParams(640, 480); 
    mainLp.leftMargin = 20; 
 
    mainLayout.addView(mPreview, mainLp); 
 
    Button btn = new Button(this); 
    btn.setOnClickListener(new OnClickListener(){ 
 
        public void onClick(View v) { 
            RelativeLayout.LayoutParams nLp = (LayoutParams) mPreview.getLayoutParams(); 
            nLp.leftMargin += 10; 
            Log.v(TAG,"nLp.leftMargin: " + nLp.leftMargin); 
            mPreview.setLayoutParams(nLp); 
        } 
 
    }); 
    btn.setText("Click me!"); 
 
    RelativeLayout.LayoutParams btnLp = new RelativeLayout.LayoutParams( 
            RelativeLayout.LayoutParams.WRAP_CONTENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT); 
    btnLp.addRule(RelativeLayout.BELOW, mPreview.getId()); 
 
    mainLayout.addView(btn ,btnLp); 
    setContentView(mainLayout); 
} 

}