質問編集履歴

1

ソースコードを入れさせていただきました。回答ありがとうございます。

2016/07/20 04:18

投稿

atokoo
atokoo

スコア13

test CHANGED
File without changes
test CHANGED
@@ -29,3 +29,381 @@
29
29
 
30
30
 
31
31
  などのエラーが出ます この場合はそのシンボルを作っていないからでしょうか?最近始めたばかりでまだまだ初心者なので作り方など参考サイトなど教えてもらえれば助かります。回答よろしくお願いします。
32
+
33
+
34
+
35
+
36
+
37
+ ```java
38
+
39
+ package gggggggggg.p;
40
+
41
+
42
+
43
+ import java.io.FileOutputStream;
44
+
45
+
46
+
47
+ import android.support.v7.app.ActionBarActivity;
48
+
49
+ import android.support.v7.app.ActionBar;
50
+
51
+ import android.support.v4.app.Fragment;
52
+
53
+ import android.app.ActionBar.LayoutParams;
54
+
55
+ import android.hardware.Camera;
56
+
57
+ import android.hardware.Camera.Size;
58
+
59
+ import android.os.Bundle;
60
+
61
+ import android.os.Environment;
62
+
63
+ import android.util.Log;
64
+
65
+ import android.view.LayoutInflater;
66
+
67
+ import android.view.Menu;
68
+
69
+ import android.view.MenuItem;
70
+
71
+ import android.view.MotionEvent;
72
+
73
+ import android.view.SurfaceHolder;
74
+
75
+ import android.view.SurfaceView;
76
+
77
+ import android.view.View;
78
+
79
+ import android.view.View.OnTouchListener;
80
+
81
+ import android.view.ViewGroup;
82
+
83
+ import android.view.ViewTreeObserver.OnGlobalLayoutListener;
84
+
85
+ import android.os.Build;
86
+
87
+
88
+
89
+ public class MainActivity extends ActionBarActivity {
90
+
91
+ final static private String TAG = "screen2camera";
92
+
93
+
94
+
95
+ @Override
96
+
97
+ protected void onCreate(Bundle savedInstanceState) {
98
+
99
+ super.onCreate(savedInstanceState);
100
+
101
+ setContentView(R.layout.activity_main);
102
+
103
+
104
+
105
+ if (savedInstanceState == null) {
106
+
107
+ getSupportFragmentManager().beginTransaction().add(R.id.container, new CameraFragment()).commit();
108
+
109
+ }
110
+
111
+ }
112
+
113
+
114
+
115
+ @Override
116
+
117
+ public boolean onCreateOptionsMenu(Menu menu) {
118
+
119
+ getMenuInflater().inflate(R.menu.main, menu);
120
+
121
+ return true;
122
+
123
+ }
124
+
125
+
126
+
127
+ @Override
128
+
129
+ public boolean onOptionsItemSelected(MenuItem item) {
130
+
131
+ int id = item.getItemId();
132
+
133
+ if (id == R.id.action_settings) {
134
+
135
+ return true;
136
+
137
+ }
138
+
139
+ return super.onOptionsItemSelected(item);
140
+
141
+ }
142
+
143
+
144
+
145
+
146
+
147
+ /**
148
+
149
+ * カメラ撮影用フラグメント
150
+
151
+ */
152
+
153
+ public static class CameraFragment extends Fragment {
154
+
155
+
156
+
157
+ // ------------------------------------------------------------
158
+
159
+ // メンバー変数
160
+
161
+ // ------------------------------------------------------------
162
+
163
+ private Camera camera_; // カメラインスタンス
164
+
165
+ View rootView_; // ルートView
166
+
167
+ SurfaceView surfaceView_; // プレビュー用SurfaceView
168
+
169
+
170
+
171
+ // ------------------------------------------------------------
172
+
173
+ // リスナー
174
+
175
+ // ------------------------------------------------------------
176
+
177
+
178
+
179
+ // Surfaceリスナー
180
+
181
+ private SurfaceHolder.Callback surfaceListener_ = new SurfaceHolder.Callback() {
182
+
183
+ // Surface作成
184
+
185
+ public void surfaceCreated(SurfaceHolder holder) {
186
+
187
+ // カメラインスタンスを取得
188
+
189
+ camera_ = Camera.open();
190
+
191
+ try {
192
+
193
+ camera_.setPreviewDisplay(holder);
194
+
195
+ } catch (Exception e) {
196
+
197
+ e.printStackTrace();
198
+
199
+ }
200
+
201
+ }
202
+
203
+
204
+
205
+ // Surface破棄時
206
+
207
+ public void surfaceDestroyed(SurfaceHolder holder) {
208
+
209
+ // カメラインスタンス開放
210
+
211
+ camera_.release();
212
+
213
+ camera_ = null;
214
+
215
+ }
216
+
217
+
218
+
219
+ // Surface変更時
220
+
221
+ // プレビューのパラメーターを設定し、プレビューを開始する
222
+
223
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
224
+
225
+ Log.d(TAG, "surfaceChanged width:" + width + " height:" + height);
226
+
227
+
228
+
229
+ Camera.Parameters parameters = camera_.getParameters();
230
+
231
+
232
+
233
+ // デバッグ用表示
234
+
235
+ Size size = parameters.getPictureSize();
236
+
237
+ Log.d(TAG, "getPictureSize width:" + size.width + " size.height:" + size.height);
238
+
239
+ size = parameters.getPreviewSize();
240
+
241
+ Log.d(TAG, "getPreviewSize width:" + size.width + " size.height:" + size.height);
242
+
243
+
244
+
245
+ // プレビューのサイズを変更
246
+
247
+ // parameters.setPreviewSize(width, height); // 画面サイズに合わせて変更しようとしたが失敗する
248
+
249
+ parameters.setPreviewSize(640, 480); // 使用できるサイズはカメラごとに決まっている
250
+
251
+
252
+
253
+ // パラメーターセット
254
+
255
+ camera_.setParameters(parameters);
256
+
257
+ // プレビュー開始
258
+
259
+ camera_.startPreview();
260
+
261
+ }
262
+
263
+ };
264
+
265
+
266
+
267
+ // シャッターが押されたときに呼ばれるコールバック
268
+
269
+ private Camera.ShutterCallback shutterListener_ = new Camera.ShutterCallback() {
270
+
271
+ public void onShutter() {
272
+
273
+ }
274
+
275
+ };
276
+
277
+
278
+
279
+ // JPEGイメージ生成後に呼ばれるコールバック
280
+
281
+ private Camera.PictureCallback pictureListener_ = new Camera.PictureCallback() {
282
+
283
+ // データ生成完了
284
+
285
+ public void onPictureTaken(byte[] data, Camera camera) {
286
+
287
+ // SDカードにJPEGデータを保存する
288
+
289
+ if (data != null) {
290
+
291
+ FileOutputStream fos = null;
292
+
293
+ try {
294
+
295
+ fos = new FileOutputStream(Environment.getExternalStorageDirectory().getPath()+ "/camera_test.jpg");
296
+
297
+ fos.write(data);
298
+
299
+ fos.close();
300
+
301
+ } catch (Exception e) {
302
+
303
+ e.printStackTrace();
304
+
305
+ }
306
+
307
+
308
+
309
+ // プレビューを再開する
310
+
311
+ camera.startPreview();
312
+
313
+ }
314
+
315
+ }
316
+
317
+ };
318
+
319
+
320
+
321
+ // 画面タッチ時のコールバック
322
+
323
+ OnTouchListener ontouchListener_ = new OnTouchListener() {
324
+
325
+ @Override
326
+
327
+ public boolean onTouch(View v, MotionEvent event) {
328
+
329
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
330
+
331
+ if (camera_ != null) {
332
+
333
+ // 撮影実行
334
+
335
+ camera_.takePicture(shutterListener_, null, pictureListener_);
336
+
337
+ }
338
+
339
+ }
340
+
341
+ return false;
342
+
343
+ }
344
+
345
+ };
346
+
347
+
348
+
349
+ // ------------------------------------------------------------
350
+
351
+ // Fragment
352
+
353
+ // ------------------------------------------------------------
354
+
355
+
356
+
357
+ // Fragmentコンストラクタ
358
+
359
+ public CameraFragment() {
360
+
361
+ }
362
+
363
+
364
+
365
+ // View作成
366
+
367
+ @Override
368
+
369
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
370
+
371
+ // View作成
372
+
373
+ rootView_ = inflater.inflate(R.layout.fragment_main, container, false);
374
+
375
+
376
+
377
+ // View内のView取得
378
+
379
+ surfaceView_ = (SurfaceView) rootView_ .findViewById(R.id.surface_view);
380
+
381
+
382
+
383
+ // SurfaceHolder設定
384
+
385
+ SurfaceHolder holder = surfaceView_.getHolder();
386
+
387
+ holder.addCallback(surfaceListener_);
388
+
389
+ holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
390
+
391
+
392
+
393
+ // タッチリスナー設定
394
+
395
+ rootView_.setOnTouchListener(ontouchListener_);
396
+
397
+
398
+
399
+ return rootView_;
400
+
401
+ }
402
+
403
+ }
404
+
405
+
406
+
407
+ }
408
+
409
+ ```