android实现手机App实现拍照功能示例

发布时间 - 2026-01-10 23:15:14    点击率:

实现手机App实现拍照功能结果如下


第一步:

activity_takephoto.xml布局用SurfaceView

 <?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:id="@+id/activity_takephoto"
  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.example.android_27.TakephotoActivity">
      <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/sv_takephoto"
        />
  <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="拍照"
      android:id="@+id/b_OK"
      />
    <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="切换"
      android:id="@+id/b_qh"
      />
  </LinearLayout>
</RelativeLayout>

第二步:TakephotoActivity类

public class TakephotoActivity extends AppCompatActivity {

  private SurfaceView sv_takephoto;
  private Button b_OK;
  private Button b_qh;
  private Camera camera;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_takephoto);
    //获得SurfaceView的ID
    sv_takephoto =(SurfaceView) findViewById(R.id.sv_takephoto);
    //获得拍照的ID
    b_OK =(Button)findViewById(R.id.b_OK);
    //获得切换镜头的ID
    b_qh =(Button)findViewById(R.id.b_qh);

    sv_takephoto.getHolder().addCallback(new SurfaceHolder.Callback() {
      @Override
      public void surfaceCreated(SurfaceHolder surfaceHolder) {
      //打开相机
        camera = Camera.open();
        //给相机设置参数
        Camera.Parameters parameters= camera.getParameters();
        //设置保存的格式
        parameters.setPictureFormat(PixelFormat.JPEG);
        parameters.set("jpeg-quality",85);
        camera.setParameters(parameters);

        //将画面展示到SurfaceView中
        try {
          camera.setPreviewDisplay(sv_takephoto.getHolder());
          //开启预览
          camera.startPreview();
        } catch (IOException e) {
          e.printStackTrace();
        }

      }

      @Override
      public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

      }

      @Override
      public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

      }
    });

    //拍照的点击事件
    b_OK.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        //拍照
        camera.takePicture(null, null, new Camera.PictureCallback() {
          @Override
          public void onPictureTaken(byte[] bytes, Camera camera) {
            //将字节数组转成图片
            Bitmap bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length);
            try {
              FileOutputStream fos=new FileOutputStream("/mnt/sdcard/DCIM/"+System.currentTimeMillis()+".jpg");
              bitmap.compress(Bitmap.CompressFormat.PNG,85,fos);
              camera.stopPreview();
              camera.startPreview();
            } catch (FileNotFoundException e) {
              e.printStackTrace();
            }
          }
        });

    }
    });

  }
}

第三步:在AndroidManifest.xml中加权限

<uses-permission android:name="android.permission.CAMERA" />

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android实现拍照功能  # android  # 实现拍照  # android拍照功能  # Android编程调用系统自带的拍照功能并返回JPG文件示例【附demo源码下载】  # Android自定义相机实现定时拍照功能  # Android使用系统自带的相机实现一键拍照功能  # Android仿微信选择图片和拍照功能  # Android实现手机拍照功能  # Android调用手机拍照功能的方法  # Android启动相机拍照并返回图片  # Android仿微信发表说说实现拍照、多图上传功能  # Android实现从本地图库/相机拍照后裁剪图片并设置头像  # Android手机拍照或选取图库图片作为头像  # Android编程实现拍照功能的2种方法分析  # 第二步  # 第三步  # 转成  # 大家多多  # 中加  # text  # Button  # activity_horizontal_margin  # sv_takephoto  # b_qh  # b_OK  # wrap_content  # context  # paddingTop  # LinearLayout  # paddingRight  # TakephotoActivity  # java  # Bundle  # onCreate 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  黑客入侵网站服务器的常见手法有哪些?  实例解析Array和String方法  如何彻底删除建站之星生成的Banner?  C++时间戳转换成日期时间的步骤和示例代码  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Python函数文档自动校验_规范解析【教程】  如何用IIS7快速搭建并优化网站站点?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何在 React 中条件性地遍历数组并渲染元素  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Laravel如何实现API速率限制?(Rate Limiting教程)  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  如何在腾讯云服务器快速搭建个人网站?  js实现点击每个li节点,都弹出其文本值及修改  JavaScript如何操作视频_媒体API怎么控制播放  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  网站制作企业,网站的banner和导航栏是指什么?  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  jQuery中的100个技巧汇总  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  浅析上传头像示例及其注意事项  如何快速生成凡客建站的专业级图册?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  iOS发送验证码倒计时应用  Laravel怎么使用Intervention Image库处理图片上传和缩放  详解Oracle修改字段类型方法总结  如何在IIS7中新建站点?详细步骤解析  EditPlus中的正则表达式 实战(1)  Laravel PHP版本要求一览_Laravel各版本环境要求对照  制作公司内部网站有哪些,内网如何建网站?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Laravel怎么实现验证码(Captcha)功能  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何挑选最适合建站的高性能VPS主机?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  教学论文网站制作软件有哪些,写论文用什么软件 ?  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何用PHP工具快速搭建高效网站?