具体功能是,当用户触摸屏幕时,在右下角出现“对焦”和“拍照”两个按钮,相应实现对焦和拍照的功能,照片保存到SD卡中。
程序代码如下,欢迎讨论:
package com.example.takepicture;
import java.io.File;
import java.io.FileOutputStream;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
public class Takepicture extends Activity {
private View layout;
private Camera camera;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
layout=this.findViewById(R.id.buttonLayout);
SurfaceView surfaceView = (SurfaceView)this.findViewById(R.id.surfaceView);
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// surfaceView.getHolder().setFixedSize(176, 144);
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceCallback());
}
public void takepicture(View v){
if (camera!=null){
switch(v.getId()){
case R.id.takepicture:
camera.takePicture(null, null, new MyPictureCallback());
case R.id.focus:
camera.autoFocus(null);
}
}
}
private final class MyPictureCallback implements PictureCallback{
public void onPictureTaken(byte[] data, Camera camera) {
try{
File jpgFile=new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
FileOutputStream outStream = new FileOutputStream(jpgFile);
outStream.write(data);
outStream.close();
} catch(Exception e){
e.printStackTrace();
}
}
}
//private final class MyPictureCallback implements PictureCallback{
//}
private final class SurfaceCallback implements Callback{
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
try{
camera=Camera.open();//打开摄像头
Camera.Parameters parameters=camera.getParameters();
//Log.i("Takepicture", parameters.flatten());
//parameters.setPreviewSize(800,480);
//parameters.setPreviewFrameRate(5);
//parameters.setPictureSize(1027, 768);
//parameters.setJpegQuality(100);
//camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.startPreview();
}catch(Exception e){
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
if(camera!=null){
camera.release();
camera=null;
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==MotionEvent.ACTION_DOWN){
layout.setVisibility(ViewGroup.VISIBLE);
return true;
}
return super.onTouchEvent(event);
}
}
界面,main.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<SurfaceView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/surfaceView"
/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"
android:id="@+id/buttonLayout"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="5dp"
android:text="@string/takepicture"
android:onClick="takepicture"
android:id="@+id/takepicture"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/takepicture"
android:layout_alignTop="@id/takepicture"
android:layout_marginRight="20dp"
android:text="@string/focus"
android:onClick="takepicture"
android:id="@+id/focus"/>
</RelativeLayout>
</FrameLayout>