![【移動應(yīng)用開發(fā)技術(shù)】Android中怎么調(diào)用Camera_第1頁](http://file4.renrendoc.com/view/bf9c728da7dc04da9264b5ae3a819d22/bf9c728da7dc04da9264b5ae3a819d221.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android中怎么調(diào)用Camera_第2頁](http://file4.renrendoc.com/view/bf9c728da7dc04da9264b5ae3a819d22/bf9c728da7dc04da9264b5ae3a819d222.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android中怎么調(diào)用Camera_第3頁](http://file4.renrendoc.com/view/bf9c728da7dc04da9264b5ae3a819d22/bf9c728da7dc04da9264b5ae3a819d223.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android中怎么調(diào)用Camera_第4頁](http://file4.renrendoc.com/view/bf9c728da7dc04da9264b5ae3a819d22/bf9c728da7dc04da9264b5ae3a819d224.gif)
![【移動應(yīng)用開發(fā)技術(shù)】Android中怎么調(diào)用Camera_第5頁](http://file4.renrendoc.com/view/bf9c728da7dc04da9264b5ae3a819d22/bf9c728da7dc04da9264b5ae3a819d225.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么調(diào)用Camera
Android中怎么調(diào)用Camera,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。首先是布局文件,線性布局,左邊兩個按鈕垂直擺放,右邊預(yù)覽圖以及照相獲取到的圖:<?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(用于相機(jī)的照相預(yù)覽).以及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;
//
回調(diào)用的picture,實現(xiàn)里邊的onPictureTaken方法,其中byte[]數(shù)組即為照相后獲取到的圖片信息
private
Camera.PictureCallback
picture
=
new
Camera.PictureCallback()
{
@Override
public
void
onPictureTaken(byte[]
data,
Camera
camera)
{
//
主要就是將圖片轉(zhuǎn)化成drawable,設(shè)置為固定區(qū)域的背景(展示圖片),當(dāng)然也可以直接在布局文件里放一個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,負(fù)責(zé)展示預(yù)覽圖片,camera的開關(guān)
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();
//以下注釋掉的是設(shè)置預(yù)覽時的圖像以及拍照的一些參數(shù)
//
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
{
//設(shè)置camera預(yù)覽的角度,因為默認(rèn)圖片是傾斜90度的
camera.setDisplayOrientation(90);
//設(shè)置holder主要是用于surfaceView的圖片的實時預(yù)覽,以及獲取圖片等功能,可以理解為控制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;
//
回調(diào)用的picture,實現(xiàn)里邊的onPictureTaken方法,其中byte[]數(shù)組即為照相后獲取到的圖片信息
private
Camera.PictureCallback
picture
=
new
Camera.PictureCallback()
{
@Override
public
void
onPictureTaken(byte[]
data,
Camera
camera)
{
//
主要就是將圖片轉(zhuǎn)化成drawable,設(shè)置為固定區(qū)域的背景(展示圖片),當(dāng)然也可以直接在布局文件里放一個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,負(fù)責(zé)展示預(yù)覽圖片,camera的開關(guān)
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();
//以下注釋掉的是設(shè)置預(yù)覽時的圖像以及拍照的一些參數(shù)
//
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
{
//設(shè)置camera預(yù)覽的角度,因為默認(rèn)圖片是傾斜90度的
camera.setDisplayOrientation(90);
//設(shè)置holder主要是用于surfaceView的圖片的實時預(yù)覽,以及獲取圖片等功能,可以理解為控制camera的操作..
camera
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜教版道德與法治九年級上冊8.1《升學(xué)就業(yè)善選擇》聽課評課記錄
- 浙教版數(shù)學(xué)七年級上冊第五章《一元一次方程》復(fù)習(xí)聽評課記錄
- 蘇科版七年級數(shù)學(xué)上冊《2.7.1理數(shù)的乘方》聽評課記錄
- 華東師大版七年級數(shù)學(xué)上冊《第1章走進(jìn)數(shù)學(xué)世界1.2人類離不開數(shù)學(xué) 》聽評課記錄
- 蘇科版數(shù)學(xué)九年級下冊8.4《抽簽方法合理嗎》聽評課記錄
- 蘇科版數(shù)學(xué)九年級上冊1.2《一元二次方程的解法》聽評課記錄4
- 生態(tài)環(huán)境監(jiān)測數(shù)據(jù)共享合同(2篇)
- 環(huán)境數(shù)據(jù)共享服務(wù)合同(2篇)
- 聽評課研討記錄七年級
- 滬教版數(shù)學(xué)七年級下冊15.2《直角坐標(biāo)平面內(nèi)點的運動》聽評課記錄
- 電化學(xué)免疫傳感器的應(yīng)用
- 數(shù)據(jù)中心基礎(chǔ)知識培訓(xùn)-2024鮮版
- 供電企業(yè)輿情的預(yù)防及處置
- 【高中語文】《氓》課件++統(tǒng)編版+高中語文選擇性必修下冊
- T-WAPIA 052.3-2023 無線局域網(wǎng)設(shè)備技術(shù)規(guī)范 第3部分:接入點和控制器
- 第4課+中古時期的亞洲(教學(xué)設(shè)計)-【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 金點子活動總結(jié)匯報
- 運動技能學(xué)習(xí)與控制完整
- 原料驗收標(biāo)準(zhǔn)知識培訓(xùn)課件
- Unit4MyfamilyStorytime(課件)人教新起點英語三年級下冊
- 物流運作管理-需求預(yù)測
評論
0/150
提交評論