C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

カメラのプレビュー画像の表示には, サーフェイスビュー(SurfaceView)を使用する.

プレビュー画像の表示

  • src/Camera02.java
    • SurfaceViewのインスタンスを取得する.
    • SurfaceHolderを取得し, コールバック関数を登録する.
    • SurfaceHolderのタイプを設定する.
    • SurfaceHolder.CallbackインタフェースのsurfaceCreatedメソッドをオーバーライドする.
      • Camera#openメソッドで, カメラをオープンする.
      • Camera#setPreviewDisplayメソッドで, プレビュー画面を設定する.
    • SurfaceHolder.CallbackインタフェースのsurfaceChangedメソッドをオーバーライドする.
      • Camera#stopPreviewメソッドで, プレビューを停止する.
      • Camera#getParametersメソッドで, Camera.Parametersのインスタンスを取得する.
      • Parameters#getSupportedPreviewSizesメソッドで, サポートしているプレビューサイズを取得する.
      • Parameters#setPreviewSizeメソッドで, パラメータにプレビューサイズを設定する.
      • Camera#setParametersメソッドでパラメータを設定する.
      • Camera#startPreviewメソッドで, プレビューを再開する.
    • SurfaceHolder.CallbackインタフェースのsurfaceDestroyedメソッドをオーバーライドする.
      • プレビュー中ならCamera#stopPreviewメソッドで, プレビューを停止する.
      • Camera#releaseメソッドで, カメラのリソースを解放する.
package com.moonlight_aska.android.camera02;

import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Camera02 extends Activity implements SurfaceHolder.Callback {
  private Camera mCamera = null;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    SurfaceView preview = (SurfaceView)findViewById(R.id.preview_id);
    SurfaceHolder holder = preview.getHolder();
    holder.addCallback(this);
    // holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); ← API Level 11以降では不要
  }

  @Override
  public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    mCamera = Camera.open();
    try {
      mCamera.setPreviewDisplay(holder);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    // TODO Auto-generated method stub
    mCamera.stopPreview();
    // プレビュー画面のサイズ設定
    Camera.Parameters params = mCamera.getParameters();
    List<Size> previewSizes = params.getSupportedPreviewSizes();
    Size size = previewSizes.get(0);
    params.setPreviewSize(size.width, size.height);
    mCamera.setParameters(params);
    // プレビュー開始
    mCamera.startPreview();
  }

  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    mCamera.stopPreview();
    mCamera.release();
    mCamera = null;
  }
}
  • res/layout/main.xml
    • SurfaceViewを配置する.
<?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="vertical" >

  <SurfaceView android:id="@+id/preview_id"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

</LinearLayout>
  • AndroidManifest.xml
    • カメラを使用するには, "android.permission.CAMERA"パーミッションを設定する.
    • "android.hardware.camera"で, カメラ機能を備えたハードに限定する.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.moonlight_aska.android.camera02"
   android:versionCode="1"
   android:versionName="1.0">
  <uses-sdk android:minSdkVersion="8" />
  <uses-permission android:name="android.permission.CAMERA"/>
  <uses-feature android:name="android.hardware.camere"/>

  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Camera02"
       android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
</manifest>



このページへのコメント

スーパーコピーブランド激安通販専門店!

世界一流のスーパーコピーブランド時計、バッグ、財布、アクセサリ最新入荷!
ブランドコピー、ブランド偽物、ルイヴィトンコピー、 ロレックスコピー、シャネルコピー、グッチコピー、エルメスコピー、 ボッテガ?ヴェネタコピー、 バーバリーコピー、ミュウミュウコピー、トリーバーチコピー、バレンシアガコピー、ディオールコピー、ブルガリコピー、ブラダコピー、 ドルチェ&ガッバーナコピー、オメガコピー、フランク ミュラーコピー、gagaコピー。
私達は長年の実体商店の販売経験を持って、先進とプロの技術を持って、
高品質のスーパーコピー時計づくりに 取り組んでいます。
最高品質のロレックス時計コピー、カルティエ時計コピー、IWC時計コピー、
ブライトリング時計コピー、パネライ時計コピー激安販売中
商品の数量は多い、品質はよい。海外直営店直接買い付け
商品の数量は多い、品質はよい.海外直営店直接買い付け!
商品は全てよい材料と優れた品質で作ります。
高質な製品を驚きの低価格で提供して,安心、迅速、確実にお客様の手元にお届け致します。
ぜひご来店くださいませ。
※ 2018年注文割引開催中,全部の商品割引10%
※ 在庫情報随時更新!
※ 100%品質を保証する。
※ 送料は無料です(日本全国)!
※ 経営方針: 品質を重視、納期も厳守、信用第一!税関の没収する商品は再度無料にして発送します!
URL:}

0
Posted by j5qd0st871 2018年08月28日(火) 17:25:27 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

Firebase(2)

AD



管理人/副管理人のみ編集できます