Andorid Camera的简单实用
2015-12-20 16:20
393 查看
现在很多应用中都会使用到我们的相机功能,来进行拍照,设置头像等等。
在这里给大家简单介绍一下Camera的使用。
大家尝尝会看到当我们在app中调用拍照功能时,往往会出现选择相机,而在这块就出现了我们所谓的 自定义Camera和系统自带的Camera。
下面就给大家介绍一下这两种:
备注:项目中使用了ButterKnife快速开发框架
应用权限:
1.系统Camera
*备注:建议使用真机测试
在此使用了Surfaceview进行显示*
2.自定义相机
xml:
activity_main
activity_cust:
activity_result:
如需要源码请留言…
在这里给大家简单介绍一下Camera的使用。
大家尝尝会看到当我们在app中调用拍照功能时,往往会出现选择相机,而在这块就出现了我们所谓的 自定义Camera和系统自带的Camera。
下面就给大家介绍一下这两种:
备注:项目中使用了ButterKnife快速开发框架
应用权限:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.howie.camerademo"> <!-- 访问SDCard --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 自定义相机使用权限 --> <uses-permission android:name="android.permission.CAMERA" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <!-- 自定义相机 配置intent-filter --> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".CustActivity" /> <activity android:name=".ResultActivity"></activity> </application> </manifest>
1.系统Camera
package com.howie.camerademo; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import butterknife.ButterKnife; import butterknife.InjectView; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ @InjectView(R.id.btn_camera)Button btnCamera; @InjectView(R.id.btn_save)Button btnSave; @InjectView(R.id.iv_photo)ImageView ivPhoto; @InjectView(R.id.btn_cust)Button btnCust; private String path; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); path = Environment.getExternalStorageDirectory().getPath(); path = path + "/temp.png"; ButterKnife.inject(this); btnCamera.setOnClickListener(this); btnSave.setOnClickListener(this); btnCust.setOnClickListener(this); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_OK){ if(requestCode == 0x001){ Bundle bundle = data.getExtras(); if(bundle != null){ Bitmap bitmap = (Bitmap)bundle.get("data"); Toast.makeText(this,bitmap.getByteCount()+"",Toast.LENGTH_SHORT).show(); ivPhoto.setImageBitmap(bitmap); } }else if(requestCode == 0x011){ FileInputStream fis = null; try { fis = new FileInputStream(path); Bitmap bitmap = BitmapFactory.decodeStream(fis); Toast.makeText(this,bitmap.getByteCount()+"",Toast.LENGTH_SHORT).show(); ivPhoto.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); }finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } @Override public void onClick(View v) { Intent intent = null; switch (v.getId()){ /* 通过intent将拍照后的图片传递回来(图片经过了压缩) */ case R.id.btn_camera: intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent,0x001); break; case R.id.btn_save: /* 将拍照后的图片保存到本地 */ intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri uri = Uri.fromFile(new File(path)); intent.putExtra(MediaStore.EXTRA_OUTPUT,uri); startActivityForResult(intent,0x011); break; case R.id.btn_cust: /* 自定义相机拍照 */ startActivity(new Intent(this,CustActivity.class)); break; } } }
*备注:建议使用真机测试
在此使用了Surfaceview进行显示*
2.自定义相机
package com.howie.camerademo; import android.content.Intent; import android.graphics.ImageFormat; import android.hardware.Camera; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import butterknife.ButterKnife; import butterknife.InjectView; public class CustActivity extends AppCompatActivity implements View.OnClickListener,SurfaceHolder.Callback{ @InjectView(R.id.btn_cust_camera)Button btnCustCamera; @InjectView(R.id.sv_1)SurfaceView sv; private SurfaceHolder mHolder; private Camera camera; private Camera.PictureCallback pictureCallback = new Camera.PictureCallback(){ @Override public void onPictureTaken(byte[] data, Camera camera) { File file = new File("/sdcard/temp.jpg"); try { FileOutputStream fos = new FileOutputStream(file); fos.write(data); fos.close(); Intent intent = new Intent(CustActivity.this,ResultActivity.class); intent.putExtra("path",file.getAbsolutePath()); startActivity(intent); CustActivity.this.finish(); } catch (IOException e) { e.printStackTrace(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cust); ButterKnife.inject(this); mHolder = sv.getHolder(); mHolder.addCallback(this); btnCustCamera.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.btn_cust_camera: Camera.Parameters parameter = camera.getParameters(); //PPICTURE TYPE parameter.setPictureFormat(ImageFormat.JPEG); //DISPLAY SIZE parameter.setPreviewSize(800, 400); //AUTO FOCUS parameter.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); if(camera != null){ camera.autoFocus(new Camera.AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { Toast.makeText(CustActivity.this,success+"",Toast.LENGTH_SHORT).show(); if(success){ camera.takePicture(null, null, pictureCallback); } } }); } break; } } @Override protected void onResume() { super.onResume(); if(camera == null){ camera = getCamera(); setStartPreview(); } } @Override protected void onPause() { super.onPause(); if(camera != null){ camera.setPreviewCallback(null); camera.stopPreview(); releaseCamera(); } } /** * 获取Camera * @return */ private Camera getCamera(){ try { camera = android.hardware.Camera.open(); } catch (Exception e) { camera = null; e.printStackTrace(); } return camera; } private void setStartPreview(){ if(camera != null && mHolder != null){ try { camera.setPreviewDisplay(mHolder); //DeFault:H SET:V camera.setDisplayOrientation(90); camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } } private void releaseCamera(){ if(camera !=null){ camera.release(); camera = null; } } @Override public void surfaceCreated(SurfaceHolder holder) { setStartPreview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { camera.stopPreview(); setStartPreview(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { releaseCamera(); } }
package com.howie.camerademo; import android.content.Intent; import android.graphics.BitmapFactory; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageButton; import android.widget.ImageView; import java.io.FileInputStream; import java.io.FileNotFoundException; import butterknife.ButterKnife; import butterknife.InjectView; public class ResultActivity extends AppCompatActivity { @InjectView(R.id.iv_cur)ImageView ivCur; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result); ButterKnife.inject(this); Intent intent = getIntent(); String path = intent.getStringExtra("path"); ivCur.setImageBitmap(BitmapFactory.decodeFile(path)); } }
xml:
activity_main
<?xml version="1.0" encoding="utf-8"?> <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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.howie.camerademo.MainActivity"> <Button android:id="@+id/btn_camera" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="打开系统Camera"/> <Button android:id="@+id/btn_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="拍照保存原图"/> <Button android:id="@+id/btn_cust" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="自定义Camera"/> <ImageView android:id="@+id/iv_photo" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
activity_cust:
<?xml version="1.0" encoding="utf-8"?> <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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.howie.camerademo.CustActivity"> <Button android:id="@+id/btn_cust_camera" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="拍照---自定义"/> <SurfaceView android:id="@+id/sv_1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
activity_result:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.howie.camerademo.ResultActivity"> <ImageView android:id="@+id/iv_cur" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
如需要源码请留言…
相关文章推荐
- HTML5真正的新特性是什么?
- 基于rails的schedule网站开发(16):可以继续研究的内容
- 安装redis
- HDU_3466_动规(01背包)
- html5 引入什么新的表单属性
- 数据结构小结 说明
- TableLayout实现登录界面
- 高性能,高并发
- 用MXnet实战深度学习之一:安装GPU版mxnet并跑一个MNIST手写数字识别
- 【HDU】5248-序列变换(贪心+二分)
- html5表单数据如何获得
- mysql 排序后获得某行的位置
- 返回顶部
- python-markdown无法将```生成标签问题解决方法
- Windows平台下写文件的回车换行问题
- Java JUnit4
- wordpress常见问题
- Java开发环境的基本设置
- Google C++ 风格指南 命名约定 转
- 求一个HTML5 表单的写法例子