近期公司要搞摄像头测试,就专心在网上找资料,可是网上的资料很多都是只有一些简单的介绍,今天我就整理好,希望可以帮助一下有需要的朋友!!

1、首先的在清单AndroidManifest.xml中添加一下权限:


  <uses-permission android:name="android.permission.CAMERA" /><uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera.autofocus" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2、贴出代码

package com.camera.ui;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;public class CameraActivity extends Activity {private SurfaceView mSurfaceView;
private SurfaceHolder mHolder;
private Camera mCamera;
Boolean mBoolean=false;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
initSurface();        new Thread(new Runnable() {
@Override
public void run() {
initCamera();
}
}).start();}private void initSurface(){
mSurfaceView = (SurfaceView) findViewById(R.id.camera_surfaceview);
mHolder = mSurfaceView.getHolder();
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}private void initCamera() {
if(checkCameraHardware(getApplicationContext())){
openFacingCamera();
autoFocus();
}
}
private void autoFocus() {
try {
//Because open camera takes time, let the thread to sleep here
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mCamera.autoFocus(mAutoFocus);
mCamera.takePicture(null, null, mPicCallback);
}private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
return true;
} else {
return false;
}
}private  Boolean  openFacingCamera() {
//Open a front-facing camera
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
if(!mBoolean){
for (int camIdx = 0, cameraCount = Camera.getNumberOfCameras(); camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
mCamera = Camera.open(camIdx);
mBoolean =true;
}
}
}else if(mBoolean){
//Open the rear camera
for (int camIdx = 0, cameraCount = Camera.getNumberOfCameras(); camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
try {
mCamera = Camera.open(camIdx);
mBoolean =false;
} catch (RuntimeException e) {
e.printStackTrace();
return false;
}
}
}
}
try {
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
e.printStackTrace();
mCamera.stopPreview();
mCamera.release();
mCamera = null;
return false;
}
mCamera.startPreview();
return true;
}private AutoFocusCallback mAutoFocus = new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
}
};private PictureCallback mPicCallback = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
//Will get 270 photos of rotation, so that it is vertical
Bitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
Matrix mMatrix = new Matrix();
mMatrix.preRotate(270);
mBitmap = Bitmap.createBitmap(mBitmap ,0,0, mBitmap .getWidth(), mBitmap .getHeight(),mMatrix,true);
File mFile = new File(getDir(), "CameraTest.jpg");
try {
FileOutputStream mFileOutputStream = new FileOutputStream(mFile);
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, mFileOutputStream);
mFileOutputStream.close();
} catch (Exception error) {
Toast.makeText(CameraActivity.this, "Pictures failed", Toast.LENGTH_SHORT).show();;
error.printStackTrace();
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
Toast.makeText(CameraActivity.this, "To get photos success", Toast.LENGTH_SHORT).show();;
mCamera.stopPreview();
mCamera.release();
mCamera = null;
initCamera();
}
};
private File getDir(){
File mDir = Environment.getExternalStorageDirectory();
if (mDir.exists()) {
return mDir;
} else {
mDir.mkdirs();
return mDir;
}
}
}

3、还有就是简单的main.xml

<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"tools:context=".MyCamera" ><SurfaceViewandroid:id="@+id/camera_surfaceview"android:layout_width="fill_parent"android:layout_height="fill_parent" ></SurfaceView>
</RelativeLayout>


4、参考了一些厉害的博客,自己也在学习积累。

例如:http://blog.csdn.net/bill_ming/article/details/7730305

实现android 前后摄像头切换效果相关推荐

  1. android 切换摄像头加动画,android前后摄像头切换

    android前后摄像头切换demo,startview后的页面上有切换.拍照两个按钮,拍照后照片未保存,需要保存的请看下方注释,实现了拍照.聚焦功能,以下是CameraPreview.java源码: ...

  2. Android新闻公告切换效果(上下滚动左右滚动)

    今日,看到淘宝的一个效果,之前做的App中没做过,就实现了一下.使用的是原生的控件TextSwitcher,进行了简单的封装处理. 废话少说,呈上代码. package com.panghu.view ...

  3. Xamarin.android Activity动画切换效果实现

    http://blog.csdn.net/esunshine1985/article/details/44302903 1.在Resources--values下新建styles.xml,添加内容如下 ...

  4. android 同根动画_[转载]Android anim动画切换效果

    关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移.缩放. ...

  5. android手机程序切换效果,能让手机流畅到爆的设置, 但80﹪人不会用(安卓手机通用)...

    很多安卓手机用户都有这样的感觉,安卓手机用久了会觉得卡顿,切换应用不流畅等影响体验的情况时有发生.其实想要手机运行的更顺畅,可以备份资料后恢复出厂设置或刷机, 这样就像使用新手机一般.如果你不会刷机又 ...

  6. Android实现程序前后台切换效果

    本文演示如何在Android中实现程序前后台切换效果. 在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识. 我们都知道,一个Activity 可以启动另一个Act ...

  7. android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...

  8. android如何自定义viewpager,Android自定义ViewPager实现个性化的图片切换效果

    第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主界面通通ViewPager,以及图片切换也抛弃了ImageSwitch之类的,开始让ViewPager来做.时间长了,ViewPager的 ...

  9. android 页卡切换实现,TabLayout+ViewPager实现选项卡切换效果

    原来项目中一直使用tabhost做切换效果,最近在整理代码,决定放弃tabhost,使用google自带的切换布局TabLayout . 其实TabLayout实现切换效果还是蛮简单的,跟tabpag ...

最新文章

  1. 增强使用功能的Steam开源工具箱一枚
  2. 全网最全数据分析师干货-python篇
  3. (37)zabbix snmp类型 无需安装agent也能监控
  4. 记录一下:关于mysql数据误删除恢复的问题
  5. 敏捷开发模式下如何更好的进行测试
  6. linux系统修改为静态IP地址
  7. html代码大全贴音乐,网页音乐代码大全
  8. Ajax关于readyState和status的讨论
  9. WPF中加载高分辨率图片性能优化
  10. 计算机怎么接多元一次方程,Excel求解多元一次、一元二次方程组就是这么简单!...
  11. 收藏 | 史上最详细的 Landsat 1-9 系列数据集介绍~
  12. 【Multisim仿真】LM317-337双路输出可调直流稳压电源电路
  13. 耶書制造 CHMmaker 2.85版 增加转换HPJ工程到HHP工程的功能。 (转)
  14. DAX: 用SWITCH函数替换嵌套IF函数
  15. Scrum Master: 应做和不应做的事情
  16. 在python里是什么意思_在Python中$是什么意思?
  17. ISDP_ch10ch11问题汇总
  18. 前端怎么从H5调起微信扫描二维码?小程序使用扫码功能.
  19. ROS2021开发者大会将于新奥尔良重启
  20. java帮助中心_Java | 保利威帮助中心 - Part 9

热门文章

  1. 通俗简单讲解贝叶斯原理,并python实现贝叶斯分类代码
  2. php监控访客_PHP 记录访客的浏览信息方法
  3. WBSC 世界棒垒球总会·美洲
  4. CSS高级常用应用技巧汇总
  5. 个人电子邮箱注册申请哪个更好用?
  6. 2022-2028全球及中国电子商务欺诈预防行业研究及十四五规划分析报告
  7. python异常处理
  8. H5项目中通过iframe引入语音导览解决微信jsapi关于同一级域名二级域名跨域问题解决方案
  9. WebDriverException( selenium.common.exceptions.WebDriverException: Message: ‘chromedriver‘ executabl
  10. Cows in a Row