




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么调用Camera
Android中怎么调用Camera,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先是布局文件,线性布局,左边两个按钮垂直摆放,右边预览图以及照相获取到的图:<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/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);
}
}
}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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JJF(纺织)105-2023恒温水浴振荡器校准规范
- 历史●广东卷丨2021年广东省普通高中学业水平选择性考试历史试卷及答案
- DSA成像质量评价叶靓玲18课件
- 风景园林基础考研资料试题及参考答案详解【预热题】
- 《风景园林招投标与概预算》试题A附参考答案详解(基础题)
- 2024年山东华兴机械集团有限责任公司人员招聘笔试备考题库及答案详解(名师系列)
- 2023国家能源投资集团有限责任公司第一批社会招聘笔试备考题库含答案详解(综合题)
- 2025福建省泉州凤栖实业有限责任公司社会招聘17人笔试备考试题附答案详解(巩固)
- 通信原理简明教程(第2版)课件 第5章 数字调制
- Rhino+KeyShot产品设计 课件 第3章 创建曲面与编辑曲面的常用工具
- 2025年安徽省C20教育联盟中考一模物理试题(原卷版+解析版)
- 成人患者经鼻胃管喂养临床实践指南解读
- 施工组织工程设计方案
- 战场医疗救护知识
- GB/T 24477-2025适用于残障人员的电梯附加要求
- GB/T 45355-2025无压埋地排污、排水用聚乙烯(PE)管道系统
- 保险运营培训课件
- 江苏盐城历年中考作文题与审题指导(2002-2024)
- 儿童青少年近视中西医结合诊疗指南解读课件
- 专门水文地质学知到课后答案智慧树章节测试答案2025年春河海大学
- 2024停车库(场)安全管理系统技术要求
评论
0/150
提交评论