為了加快上手的速度
先舉簡單的例子和圖片
想像現在情境 : 拍電影
如果要演一齣戲需要的是??
演員?編劇?導演?設備?...等
對,就是設備 !!!
Camera : 攝影機
SurfaceHolder : 幕後處理...等
SurfaceView : 我們的在電視上所看到的畫面
1 . 為了要看到最新內容
所以我們將內容串接在幕後製作
2 . 如果有些效果能直接拍出來
那為啥麼不直接在攝影機做調整?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<SurfaceView
android:id="@+id/surfaceView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</RelativeLayout>
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends Activity implements SurfaceHolder.Callback{
private Camera mCamera;
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private boolean isOpen;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSurfaceView = (SurfaceView)findViewById(R.id.surfaceView1);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
protected void onResume() {
super.onResume();
mCamera = Camera.open();
if (mCamera != null){
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mCamera != null){
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder){
try
{
mCamera = Camera.open();
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.setDisplayOrientation(90);
}
catch (IOException e)
{
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){
Camera.Parameters parameters = mCamera.getParameters();
parameters.setFocusMode("auto");
mCamera.setParameters(parameters);
mCamera.startPreview();
isOpen = true;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
mCamera.stopPreview();
isOpen = false;
mCamera.release();
mCamera = null;
}
}
參考資料 : [Android] 相機自動定焦拍照(Camera Preview)
歡迎轉載,請註明出處。
沒有留言:
張貼留言