カメラプレビューの大きさ指定について

2,853 views
Skip to first unread message

ほげっち

unread,
Feb 1, 2011, 8:22:34 AM2/1/11
to Android-SDK-Japan
こんばんは。初めて投稿しますほげっちと申します。
非常に初歩的な内容かもしれませんが、どうにも方法がわからず質問させていただきました。
カメラプレビューをする場合に次のようなコードではどうしてもフルスクリーンの800x480ドット範囲でプレビューされてしまいます。
どうすれば640x480ドットの範囲に表示できるのでしょうか?

使用端末はGalaxySでgetPreviewSize()で取得できるサイズは(0)640x480 (1)800x480しかありません。

public class Test1 extends Activity {
private FrameLayout mFrameLayout;
private SurfaceView mCameraView;
private Camera mCamera;
public Size previewSize;
private SurfaceHolder.Callback mSurfaceHolderCallback =
new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceChanged(SurfaceHolder holder,
int format, int width, int height) {
Camera.Parameters param = mCamera.getParameters();
List<Size> supportedSizes =
param.getSupportedPreviewSizes();
previewSize = supportedSizes.get(0); //(0)でGalaxySでは
640x480ドットとなります。
param.setPreviewSize(previewSize.width,
previewSize.height);
mCamera.setParameters(param);
mCamera.startPreview();
}
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);


getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mFrameLayout = new FrameLayout(this);
mCameraView = new SurfaceView(this);
SurfaceHolder holder = mCameraView.getHolder();
holder.addCallback(mSurfaceHolderCallback);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mFrameLayout.addView(mCameraView);
setContentView(mFrameLayout);
}
}

egg

unread,
Feb 1, 2011, 11:11:00 AM2/1/11
to android-...@googlegroups.com
ほげっちさん

江川と申します。
プレビューサイズはあくまでもカメラのプレビューサイズなので、
画面上に表示されるサイズを決めるものでは無いと思います。
現在はSurfaceViewが入ったFrameLayoutが全画面に表示されています。
画面上にどれくらいの大きさで表示するかは、通常の画面と同じやり方です。
例えば
mCameraView = new SurfaceView(this);
mCameraView.setLayoutParams(new FrameLayout.LayoutParams(xxx, xxx));
こんなことをやれば見た目のサイズを小さくできますが、通常はこんなことをせずに
画面上のカメラのプレビューが表示されている領域以外の部分も含めた画面全体をxmlで
レイアウトするのではないかと思います。
また、APIDemosには、カメラのサイズを基にサイズを計算してレイアウトする
カスタムビューの例示があります。
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

------------------------------------------
EGAWA Takashi

2011/2/1 ほげっち <myas...@gmail.com>:

> --
> このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
> このグループに投稿するには、android-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-sdk-japan?hl=ja からこのグループにアクセスしてください。
>
>

ほげっち

unread,
Feb 2, 2011, 9:14:15 AM2/2/11
to Android-SDK-Japan
江川様

丁寧にご教示いただきましてありがとうございます。
xmlでの画面作成には魅力があるのですが、

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mFrameLayout = (FrameLayout) findViewById(R.id.FrameLayout01);
 //FrameLayout01をGUIで作成
mCameraView = (SurfaceView) findViewById(R.id.SurfaceView01);
 //SurfaceView01をGUIで作成

SurfaceHolder holder = mCameraView.getHolder();
holder.addCallback(mSurfaceHolderCallback);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
setContentView(mFrameLayout);
//setContentView(R.layout.main);

のようにxmlで任意に作成したFrameLayouやSurfaceViewを引用しようとしてもエラーとなってしまいます。
具体的にカメラプレビュー画面をxmlで作成したSurfaceViewに表示させるにはあとどのような点が必要なのでしょうか?



On 2月2日, 午前1:11, egg <t.eg...@gmail.com> wrote:
> ほげっちさん
>
> 江川と申します。
> プレビューサイズはあくまでもカメラのプレビューサイズなので、
> 画面上に表示されるサイズを決めるものでは無いと思います。
> 現在はSurfaceViewが入ったFrameLayoutが全画面に表示されています。
> 画面上にどれくらいの大きさで表示するかは、通常の画面と同じやり方です。
> 例えば
> mCameraView = new SurfaceView(this);
> mCameraView.setLayoutParams(new FrameLayout.LayoutParams(xxx, xxx));
> こんなことをやれば見た目のサイズを小さくできますが、通常はこんなことをせずに
> 画面上のカメラのプレビューが表示されている領域以外の部分も含めた画面全体をxmlで
> レイアウトするのではないかと思います。
> また、APIDemosには、カメラのサイズを基にサイズを計算してレイアウトする
> カスタムビューの例示があります。http://developer.android.com/resources/samples/ApiDemos/src/com/examp...
>
> ------------------------------------------
> EGAWA Takashi
>
> 2011/2/1 ほげっち <myasai...@gmail.com>:
> > 詳細については、http://groups.google.com/group/android-sdk-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

egg

unread,
Feb 2, 2011, 11:23:00 AM2/2/11
to android-...@googlegroups.com
ほげっちさん

> のようにxmlで任意に作成したFrameLayouやSurfaceViewを引用しようとしてもエラーとなってしまいます。
> 具体的にカメラプレビュー画面をxmlで作成したSurfaceViewに表示させるにはあとどのような点が必要なのでしょうか?

SurfaceViewを使わずにxmlでレイアウトを定義するときとやり方は変わりません。
findViewByIdをする前に、setContentViewでレイアウトファイルのインデックスを指定して下さい。
setContentView(R.layout.xxx);

------------------------------------------
EGAWA Takashi

2011/2/2 ほげっち <myas...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages