android中拍照功能介绍,Android实现拍照功能
大家好,这是一个简单的拍照功能,很简单的界面,一个显示图像区域SurfaceView一个“拍照”按钮。直接上代码!
1、CameraDemoActivity.java(主界面)
package org.winplus.camera;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
public class CameraDemoActivity extends Activity{
private final static String TAG = "CameraActivity";
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private Camera camera;
private File picture;
private Button btnSave;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
setupViews();
}
private void setupViews(){
surfaceView = (SurfaceView) findViewById(R.id.camera_preview); // Camera interface to instantiate components
surfaceHolder = surfaceView.getHolder(); // Camera interface to instantiate components
surfaceHolder.addCallback(surfaceCallback); // Add a callback for the SurfaceHolder
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
btnSave = (Button) findViewById(R.id.save_pic);
btnSave.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
takePic();
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_CAMERA
|| keyCode == KeyEvent.KEYCODE_SEARCH) {
takePic();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void takePic() {
camera.stopPreview();// stop the preview
camera.takePicture(null, null, pictureCallback); // picture
}
// Photo call back
Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
//@Override
public void onPictureTaken(byte[] data, Camera camera) {
new SavePictureTask().execute(data);
camera.startPreview();
}
};
// save pic
class SavePictureTask extends AsyncTask {
@Override
protected String doInBackground(byte[]... params) {
String fname = DateFormat.format("yyyyMMddhhmmss", new Date()).toString()+".jpg";
Log.i(TAG, "fname="+fname+";dir="+Environment.getExternalStorageDirectory());
//picture = new File(Environment.getExternalStorageDirectory(),fname);// create file
picture = new File(Environment.getExternalStorageDirectory()+"/"+fname);
try {
FileOutputStream fos = new FileOutputStream(picture.getPath()); // Get file output stream
fos.write(params[0]); // Written to the file
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
// SurfaceHodler Callback handle to open the camera, off camera and photo size changes
SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
Log.i(TAG, "surfaceCallback====");
camera = Camera.open(); // Turn on the camera
try {
camera.setPreviewDisplay(holder); // Set Preview
} catch (IOException e) {
camera.release();// release camera
camera = null;
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Log.i(TAG,"====surfaceChanged");
Camera.Parameters parameters = camera.getParameters(); // Camera parameters to obtain
parameters.setPictureFormat(PixelFormat.JPEG);// Setting Picture Format
// parameters.set("rotation", 180); // Arbitrary rotation
camera.setDisplayOrientation(0);
// parameters.setPreviewSize(400, 300); // Set Photo Size
camera.setParameters(parameters); // Setting camera parameters
camera.startPreview(); // Start Preview
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i(TAG,"====surfaceDestroyed");
camera.stopPreview();// stop preview
camera.release(); // Release camera resources
camera = null;
}
};
}
2、main.xml(布局文件)
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/camera_preview"
android:layout_width="800dip"
android:layout_height="600dip"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:layout_gravity="center_vertical|center_horizontal" />
android:id="@+id/save_pic"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/txt_save" />
3、别忘了添加权限:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android中拍照功能介绍,Android实现拍照功能相关推荐
- android中bmob云存储,Android中的Bmob移动后端云服务器功能
PS:一般情况下,我们在写android程序的时候,想要实现登录注册功能,可以选择自己用servlet作为服务端来实现过滤没有注册过的用户,但是太麻烦,而且不是随时都可以用的.这里介绍一个移动后端云服 ...
- android 轮换实现动画,怎么在Android中实现一个首页无限轮播功能
怎么在Android中实现一个首页无限轮播功能 发布时间:2021-04-12 16:22:49 来源:亿速云 阅读:74 作者:Leah 这期内容当中小编将会给大家带来有关怎么在Android中实现 ...
- keyshot聚光灯_渲染软件Keyshot8新版本功能介绍,这些新功能你都知道吗?
渲染软件Keyshot8新版本功能介绍,这些新功能你都知道吗? 渲染软件Keyshot已经更新到8版本了,最新版本是Keyshot8,相比于老旧版本,肯定是有了翻天覆地的变化,这些新功能你又了解多少呢 ...
- Android中使用Camera类编写手机拍照App的实例教程
Camera是Android摄像头硬件的相机类,位于硬件包"android.hardware.Camera"下.它主要用于摄像头捕获图片.启动/停止预览图片.拍照.获取视频帧等,它 ...
- android 最新功能介绍,Android Studio 常用功能介绍
界面介绍 讲解1 这个界面,显示了我们使用 Android Studio时经常接触到的功能面板. Project 面板. 用于浏览项目文件. Project 面板会显示当前的所有的 module . ...
- android客服功能介绍,Android 客服工作台 SDK
Android 客服工作台 SDK 开发工具 目录 build.gradle 配置 添加依赖,在app的build.gradle 中dependencies中加入如下(添加后需同步gradle): a ...
- Android中级控件介绍(五)
一.相对布局RelativeLayout RelativeLayout的下级视图的位置是相对位置,得有具体的参照物才能确定最终位置. 如果不设定下级视图的参照物,那么下级视图默认显示在Relative ...
- android获取qq群成员的功能实现的,Android中实现一键推广|加入QQ群功能
功能实现效果图: 一键推广QQ群.gif 第一步:访问QQ群官方网站 第二步:登录自我QQ 请选择你创建的群 获取你需要的代码(Android代码) 复制代码到Android项目中 qqgroup.p ...
- Android中使用httpclient访问服务器,需要session功能
2019独角兽企业重金招聘Python工程师标准>>> 虽然只有十分但是还是给你写一段 android中测试 跑得了 加点分可以继续追问我哦 呵呵~~~~public static ...
最新文章
- 表空间迁移(transport tablespace)测试案例
- 对于拷贝构造函数和赋值构造函数的理解
- JavaWeb学习总结(十三):使用Session防止表单重复提交
- .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(上)
- 频谱扩展 matlab,语音信号频谱扩展
- ubuntu中文输入法fcitx的安装以及出现方块的解决方法
- 7 vsphere 分配许可_外企公司员工Office 365权限是否已分配
- npm使用及cmd常用命令
- vue 表格固定首行首列(纯css)
- 零食行业python数据分析实例——基于淘宝搜索排名分析
- python中abs函数是什么意思_python中abs是什么意思
- 江苏大学正版Windows和Office全家桶--UJS微软正版化服务平台
- 线圈拉链行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 时区(Timezone)一览表
- 相机模型、相机标定及基于yolov5的单目测距实现
- 2022商业地产百货零售行业IT及数字化转型分析
- 高速数据采集卡与AWG任意波形发生器在量子计算中的应用现状
- 你真的熟悉8051单片机的引脚功能及其使用吗?
- Chrome+ProxySwitchySharp+Putty
- 利用ArcGIS制图表达标注输电线开关符号