android:id="@+id/show" android:layout_below="@id/photoNmae" android:layout_width="match_parent" android:layout_height="wrap_content"/>
import ;
import tputStream;
import ption;
import ty;
import ialog;
import Interface;
import ;
import ssFormat;
import Factory;
import ormat;
import ;
import cusCallback;
import eCallback;
import rCallback;
import ;
import nment;
import yMetrics;
import y;
import ;
import eHolder;
import ck;
import Inflater;
import eView;
import ;
import ;
import Manager;
import xt;
import iew;
public class MainActivity extends Activity {
SurfaceView sView; SurfaceView sView;
SurfaceHolder surfaceHodler;
int screenWidth, screenHeight;
// 定义系统所⽤的照相机
Camera camera;
// 是否存在预览中
boolean isPreview = false;
@Override protected void onCreate(Bundle savedInstanceState) {
te(savedInstanceState);
// 设置全屏
requestWindowFeature(E_NO_TITLE);
getWindow().setFlags(_FULLSCREEN, _FULLSCREEN);
setContentView(ty_main);
// 获取窗⼝管理器
WindowManager wm = getWindowManager();
Display display = aultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
// 获取屏幕的宽和⾼
rics(metrics);
screenWidth = ixels;
screenHeight = Pixels;
sView = (SurfaceView) findViewById();
// 设置surface不需要⾃⼰的维护缓存区
der().setType(E_TYPE_PUSH_BUFFERS);
// 获得SurfaceView的SurfaceHolder
surfaceHodler = der();
// 为srfaceHolder添加⼀个回调监听器
lback(new Callback() {
@Override public void surfaceDestroyed(SurfaceHolder arg0) {
// 如果camera不为null,释放摄像头
if (camera != null) {
if (isPreview)
eview();
e();
camera = null;
}
}
@Override public void surfaceCreated(SurfaceHolder arg0) {
// 打开摄像头
initCamera(); }
@Override public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}
});
}
private void initCamera() {
if (!isPreview) {
// 此处默认打开后置摄像头
// 通过传⼊参数可以打开前置摄像头
camera = ();
playOrientation(90);
}
if (!isPreview && camera != null) {
ters parameters = ameters();
// 设置预览照⽚的⼤⼩
viewSize(screenWidth, screenHeight);
// 设置预览照⽚时每秒显⽰多少帧的最⼩值和最⼤值
viewFpsRange(4, 10);
// 设置照⽚的格式
tureFormat();
// 设置JPG照⽚的质量
("jpeg-quality", 85); ("jpeg-quality", 85);
// 设置照⽚的⼤⼩
tureSize(screenWidth, screenHeight);
// 通过SurfaceView显⽰取景画⾯
try {
viewDisplay(surfaceHodler);
} catch (IOException e) {
// TODO Auto-generated catch block
tackTrace();
}
// 开始预览
review();
isPreview = true;
}
}
public void capture(View source) {
if (camera != null) {
// 控制摄像头⾃动对焦后才拍摄
cus(autoFocusCallback);
}
}
AutoFocusCallback autoFocusCallback = new AutoFocusCallback() {
@Override public void onAutoFocus(boolean arg0, Camera arg1) {
if (arg0) {
// takePicture()⽅法需要传⼊三个监听参数
// 第⼀个监听器;当⽤户按下快门时激发该监听器
// 第⼆个监听器;当相机获取原始照⽚时激发该监听器
// 第三个监听器;当相机获取JPG照⽚时激发该监听器
cture(new ShutterCallback() {
@Override public void onShutter() {
// 按下快门瞬间会执⾏此处代码
}
}, new PictureCallback() {
@Override public void onPictureTaken(byte[] arg0, Camera arg1) {
// 此处代码可以决定是否需要保存原始照⽚信息
}
}, myJpegCallback);
}
}
};
PictureCallback myJpegCallback = new PictureCallback() {
@Override public void onPictureTaken(byte[] data, Camera camera) {
// 根据拍照所得的数据创建位图
final Bitmap bm = ByteArray(data, 0, );
// 加载布局⽂件
View saveDialog = getLayoutInflater().inflate(, null);
final EditText potoName = (EditText) ewById(mae);
// 获取saveDialog对话框上的ImageView组件
ImageView show = (ImageView) ewById();
// 显⽰刚刚拍得的照⽚
geBitmap(bm);
// 使⽤AlertDialog组件
new r()
.setView(saveDialog)
.setNegativeButton("取消", null)
.setPositiveButton("保存",
new kListener() {
@Override public void onClick(DialogInterface arg0,
int arg1) {
// 创建⼀个位于SD卡上的⽂件 // 创建⼀个位于SD卡上的⽂件
File file = new File(Environment
.getExternalStorageDirectory()
+ "/" + t().toString()
+ ".jpg");
FileOutputStream fileOutStream=null;
try {
fileOutStream=new FileOutputStream(file);
//把位图输出到指定的⽂件中
ss(, 100, fileOutStream);
();
} catch (IOException io) {
tackTrace();
}
}
}).show();
//重新浏览
eview();
review();
isPreview=true;
}
};
@Override public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(, menu);
return true;
}}
评论列表(0条)