温馨提示×

温馨提示×

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

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

Android中怎么调用Camera

发布时间:2021-06-24 16:14:15 阅读:140 作者:Leah 栏目:移动开发
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:

package com.nico; import java.io.ByteArrayInputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.graphics.PixelFormat; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.hardware.Camera; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; public class Test extends Activity implements OnClickListener {     /** Called when the activity is first created. */     // camera 类     private Camera camera = null;     // 继承surfaceView的自定义view 用于存放照相的图片     private CameraView cv = null;     // 回调用的picture,实现里边的onPictureTaken方法,其中byte[]数组即为照相后获取到的图片信息     private Camera.PictureCallback picture = new Camera.PictureCallback() {         @Override         public void onPictureTaken(byte[] data, Camera camera) {             // 主要就是将图片转化成drawable,设置为固定区域的背景(展示图片),当然也可以直接在布局文件里放一个surfaceView供使用。             ByteArrayInputStream bais = new ByteArrayInputStream(data);             Drawable d = BitmapDrawable.createFromStream(bais, Environment                     .getExternalStorageDirectory().getAbsolutePath()                     + "/img.jpeg");             l.setBackgroundDrawable(d);             try {             } catch (Exception e) {                 e.printStackTrace();             }         }     };     // 按钮 布局等定义,不作赘述     Button btn1 = null;     Button btn2 = null;     LinearLayout l = null;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         requestWindowFeature(Window.FEATURE_NO_TITLE);         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                 WindowManager.LayoutParams.FLAG_FULLSCREEN);         getWindow().setFormat(PixelFormat.TRANSLUCENT);         setContentView(R.layout.main);         l = (LinearLayout) findViewById(R.id.cameraView);         btn1 = (Button) findViewById(R.id.btn1);         btn2 = (Button) findViewById(R.id.btn2);         btn1.setOnClickListener(this);         btn2.setOnClickListener(this);     }     //主要的surfaceView,负责展示预览图片,camera的开关     class CameraView extends SurfaceView {         //         private SurfaceHolder holder = null;         public CameraView(Context context) {             super(context);             holder = this.getHolder();             holder.addCallback(new SurfaceHolder.Callback() {                 @Override                 public void surfaceChanged(SurfaceHolder holder, int format,                         int width, int height) {                     Camera.Parameters parameters = camera.getParameters();                     //以下注释掉的是设置预览时的图像以及拍照的一些参数                     // parameters.setPictureFormat(PixelFormat.JPEG);                     // parameters.setPreviewSize(parameters.getPictureSize().width,                     // parameters.getPictureSize().height);                     // parameters.setFocusMode("auto");                     // parameters.setPictureSize(width, height);                     camera.setParameters(parameters);                     camera.startPreview();                 }                 @Override                 public void surfaceCreated(SurfaceHolder holder) {                     camera = Camera.open();                     try {                         //设置camera预览的角度,因为默认图片是倾斜90度的                         camera.setDisplayOrientation(90);                         //设置holder主要是用于surfaceView的图片的实时预览,以及获取图片等功能,可以理解为控制camera的操作..                         camera.setPreviewDisplay(holder);                     } catch (IOException e) {                         camera.release();                         camera = null;                         e.printStackTrace();                     }                 }                 @Override                 public void surfaceDestroyed(SurfaceHolder holder) {                     //顾名思义可以看懂                     camera.stopPreview();                     camera.release();                     camera = null;                 }             }); //          holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);         }     }     @Override     public void onClick(View v) {         if (v == btn1) {             l.removeAllViews();             cv = new CameraView(Test.this);             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(                     LinearLayout.LayoutParams.FILL_PARENT,                     LinearLayout.LayoutParams.FILL_PARENT);             l.addView(cv, params);         } else if (v == btn2) {             camera.takePicture(null, null, picture);         }     } } 

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

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

向AI问一下细节

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

AI

开发者交流群×