Android开发_Camera应用
来源:互联网 发布:数据库union用法 编辑:程序博客网 时间:2024/05/17 04:46
1、通过调用系统的照相机实现照相功能
1)将拍照的图片存到本地文件,然后再读取显示
public class MainActivity extends Activity {private Button btn;private ImageView iv;private File file = null;private static final int REQUEST_CODE = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.btn);iv = (ImageView) findViewById(R.id.iv);// 设置按钮单击事件btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在sdcard卡中创建一个文件夹,要获取相应的权限File dir = new File(Environment.getExternalStorageDirectory(),"pictures");if (!dir.exists()) {dir.mkdir();}file = new File(dir, System.currentTimeMillis() + ".jpg");if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}// 调用系统的照相机Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));startActivityForResult(i, REQUEST_CODE);}});}// 获取Activity返回结果的方法@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case REQUEST_CODE:iv.setImageURI(Uri.fromFile(file));break;default:break;}super.onActivityResult(requestCode, resultCode, data);}}
2)直接读取拍照的数据,并且显示
public class Main extends Activity implements OnClickListener{private ImageView imageView;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btnTakePicture = (Button)findViewById(R.id.btnTakePicture);btnTakePicture.setOnClickListener(this);imageView = (ImageView)findViewById(R.id.imageview);}protected void onActivityResult(int requestCode, int resultCode, Intent data){if(requestCode == 1){if(resultCode == Activity.RESULT_OK){Bitmap cameraBitmap = (Bitmap)data.getExtras().get("data");imageView.setImageBitmap(cameraBitmap);}}} public void onClick(View view) { Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1); }}
相应的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="开始拍照" /></LinearLayout>
2、通过调用Camera类实现照相功能
要使用照相机,需要获取相应的权限<uses-permission android:name="android.permission.CAMERA" />
public class MainActivity extends Activity {private SurfaceView sv;private Camera camera;// 照相机对象private Button btn;// 照相按钮private Callback callback = new Callback() {@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {stopPreview();}@Overridepublic void surfaceCreated(SurfaceHolder arg0) {startPreview();}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,int arg3) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sv = (SurfaceView) findViewById(R.id.sv);sv.getHolder().addCallback(callback);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// 照相机拍照camera.takePicture(null, null, new Camera.PictureCallback() {// 拍完照片后的回调方法@Overridepublic void onPictureTaken(byte[] data, Camera camera) {String path = null;if ((path = saveFile(data)) != null) {Intent i = new Intent(MainActivity.this,ImagePreviewActivity.class);i.putExtra("path", path);startActivity(i);} else {// 保存文件失败Toast.makeText(MainActivity.this, "保存照片失败!",Toast.LENGTH_SHORT).show();}}});}});}// 开始预览private void startPreview() {// 打开照相机camera = Camera.open();try {camera.setPreviewDisplay(sv.getHolder());camera.setDisplayOrientation(90);camera.startPreview();} catch (IOException e) {e.printStackTrace();}}// 结束预览private void stopPreview() {camera.stopPreview();camera.release();}// 保存照片的方法private String saveFile(byte[] bytes) {try {// createTempFile()在android 4.x版本后默认的存储路径为:/data/data/应用包名/cache// 而之前的版本该方法会把文件存储在sd上File f = File.createTempFile("img", "");FileOutputStream fos = new FileOutputStream(f);fos.write(bytes);fos.flush();fos.close();return f.getAbsolutePath();} catch (IOException e) {e.printStackTrace();}return null;}}
public class ImagePreviewActivity extends Activity {private ImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);iv = new ImageView(this);setContentView(iv);// 获取图片的路径String path = getIntent().getStringExtra("path");if (path != null) {// 显示图片iv.setImageURI(Uri.fromFile(new File(path)));}}}相应的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <SurfaceView android:id="@+id/sv" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="拍照" /></LinearLayout>
0 0
- Android开发_Camera应用
- Android开发知识_Camera & Recorder
- Android自定义相机_camera
- 驱动调试常见问题_Camera
- 驱动调试常见问题_Camera
- 驱动调试常见问题_Camera
- 驱动调试常见问题_Camera
- 驱动调试常见问题_Camera
- 驱动调试常见问题_Camera
- 驱动调试常见问题_Camera
- 驱动调试常见问题_Camera
- Android应用开发
- Android应用开发详解
- Android应用开发
- Android应用开发详解
- Android应用开发揭秘
- Android NDK应用开发
- Android应用开发基础
- 我太执著,把双方都逼到了绝路上
- maven编译时指定jdk版本
- 求单向链表第K个节点
- iOS —— APP长时间后台
- iOS:安全判断 respondsToSelector
- Android开发_Camera应用
- nginx学习之rewrite(重写)
- webservice 接口的实现和实现过程所遇到的问题!!
- 【整理】MySQL引擎
- 指针应用多维数组指针笔记
- FAQ
- ios安全小结
- cocos2dx2.X 编译时,传递编译选项
- 欢迎使用CSDN-markdown编辑器