您的位置:首页 > 其它

Andorid Camera的简单实用

2015-12-20 16:20 393 查看
现在很多应用中都会使用到我们的相机功能,来进行拍照,设置头像等等。

在这里给大家简单介绍一下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>


如需要源码请留言…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: