Android中怎么调用Camera

发布时间:2021-06-24 16:14:15 作者:Leah
阅读:139
Android开发服务器,限时0元免费领! 查看>>

Android中怎么调用Camera,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

首先是布局文件,线性布局,左边两个按钮垂直摆放,右边预览图以及照相获取到的图:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:orientation="horizontal" >      <LinearLayout         android:layout_width="200dip"         android:layout_height="150dip"         android:orientation="vertical" >          <Button             android:id="@+id/btn1"             android:layout_width="80dip"             android:layout_height="50dip"             android:text="Start takPic" />          <Button             android:id="@+id/btn2"             android:layout_width="80dip"             android:layout_height="50dip"             android:text="Get Pic" />     </LinearLayout>      <LinearLayout         android:id="@+id/cameraView"         android:layout_width="200dip"         android:layout_height="150dip"         android:orientation="vertical" >     </LinearLayout>  </LinearLayout>

代码,都写在一起的。包含一个自定义的surfaceView(用于相机的照相预览).以及activit:

  1. package com.nico; 

  2. import java.io.ByteArrayInputStream; 

  3. import java.io.IOException; 

  4. import android.app.Activity; 

  5. import android.content.Context; 

  6. import android.graphics.PixelFormat; 

  7. import android.graphics.drawable.BitmapDrawable; 

  8. import android.graphics.drawable.Drawable; 

  9. import android.hardware.Camera; 

  10. import android.os.Bundle; 

  11. import android.os.Environment; 

  12. import android.util.Log; 

  13. import android.view.SurfaceHolder; 

  14. import android.view.SurfaceView; 

  15. import android.view.View; 

  16. import android.view.Window; 

  17. import android.view.WindowManager; 

  18. import android.view.View.OnClickListener; 

  19. import android.widget.Button; 

  20. import android.widget.LinearLayout; 

  21. public class Test extends Activity implements OnClickListener { 

  22.     /** Called when the activity is first created. */ 

  23.     // camera 类 

  24.     private Camera camera = null; 

  25.     // 继承surfaceView的自定义view 用于存放照相的图片 

  26.     private CameraView cv = null; 

  27.     // 回调用的picture,实现里边的onPictureTaken方法,其中byte[]数组即为照相后获取到的图片信息 

  28.     private Camera.PictureCallback picture = new Camera.PictureCallback() { 

  29.         @Override 

  30.         public void onPictureTaken(byte[] data, Camera camera) { 

  31.             // 主要就是将图片转化成drawable,设置为固定区域的背景(展示图片),当然也可以直接在布局文件里放一个surfaceView供使用。 

  32.             ByteArrayInputStream bais = new ByteArrayInputStream(data); 

  33.             Drawable d = BitmapDrawable.createFromStream(bais, Environment 

  34.                     .getExternalStorageDirectory().getAbsolutePath() 

  35.                     + "/img.jpeg"); 

  36.             l.setBackgroundDrawable(d); 

  37.             try { 

  38.             } catch (Exception e) { 

  39.                 e.printStackTrace(); 

  40.             } 

  41.         } 

  42.     }; 

  43.     // 按钮 布局等定义,不作赘述 

  44.     Button btn1 = null; 

  45.     Button btn2 = null; 

  46.     LinearLayout l = null; 

  47.     @Override 

  48.     public void onCreate(Bundle savedInstanceState) { 

  49.         super.onCreate(savedInstanceState); 

  50.         requestWindowFeature(Window.FEATURE_NO_TITLE); 

  51.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 

  52.                 WindowManager.LayoutParams.FLAG_FULLSCREEN); 

  53.         getWindow().setFormat(PixelFormat.TRANSLUCENT); 

  54.         setContentView(R.layout.main); 

  55.         l = (LinearLayout) findViewById(R.id.cameraView); 

  56.         btn1 = (Button) findViewById(R.id.btn1); 

  57.         btn2 = (Button) findViewById(R.id.btn2); 

  58.         btn1.setOnClickListener(this); 

  59.         btn2.setOnClickListener(this); 

  60.     } 

  61.     //主要的surfaceView,负责展示预览图片,camera的开关 

  62.     class CameraView extends SurfaceView { 

  63.         // 

  64.         private SurfaceHolder holder = null; 

  65.         public CameraView(Context context) { 

  66.             super(context); 

  67.             holder = this.getHolder(); 

  68.             holder.addCallback(new SurfaceHolder.Callback() { 

  69.                 @Override 

  70.                 public void surfaceChanged(SurfaceHolder holder, int format, 

  71.                         int width, int height) { 

  72.                     Camera.Parameters parameters = camera.getParameters(); 

  73.                     //以下注释掉的是设置预览时的图像以及拍照的一些参数 

  74.                     // parameters.setPictureFormat(PixelFormat.JPEG); 

  75.                     // parameters.setPreviewSize(parameters.getPictureSize().width, 

  76.                     // parameters.getPictureSize().height); 

  77.                     // parameters.setFocusMode("auto"); 

  78.                     // parameters.setPictureSize(width, height); 

  79.                     camera.setParameters(parameters); 

  80.                     camera.startPreview(); 

  81.                 } 

  82.                 @Override 

  83.                 public void surfaceCreated(SurfaceHolder holder) { 

  84.                     camera = Camera.open(); 

  85.                     try { 

  86.                         //设置camera预览的角度,因为默认图片是倾斜90度的 

  87.                         camera.setDisplayOrientation(90); 

  88.                         //设置holder主要是用于surfaceView的图片的实时预览,以及获取图片等功能,可以理解为控制camera的操作.. 

  89.                         camera.setPreviewDisplay(holder); 

  90.                     } catch (IOException e) { 

  91.                         camera.release(); 

  92.                         camera = null; 

  93.                         e.printStackTrace(); 

  94.                     } 

  95.                 } 

  96.                 @Override 

  97.                 public void surfaceDestroyed(SurfaceHolder holder) { 

  98.                     //顾名思义可以看懂 

  99.                     camera.stopPreview(); 

  100.                     camera.release(); 

  101.                     camera = null; 

  102.                 } 

  103.             }); 

  104. //          holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

  105.         } 

  106.     } 

  107.     @Override 

  108.     public void onClick(View v) { 

  109.         if (v == btn1) { 

  110.             l.removeAllViews(); 

  111.             cv = new CameraView(Test.this); 

  112.             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( 

  113.                     LinearLayout.LayoutParams.FILL_PARENT, 

  114.                     LinearLayout.LayoutParams.FILL_PARENT); 

  115.             l.addView(cv, params); 

  116.         } else if (v == btn2) { 

  117.             camera.takePicture(null, null, picture); 

  118.         } 

  119.     } 

  120. }

看完上述内容,你们掌握Android中怎么调用Camera的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:
  1. Android Camera2 预览功能实现
  2. Android中如何调用WebService

开发者交流群:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

android camera

上一篇:JavaScript函数调用规则有哪些

下一篇:JavaScript中怎么异步调用框架

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
开发者交流群×