ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: MainActivity
名前: lightbox
処理選択
パスワード

件名 MainActivity
名前 lightbox
コメント
@SHOW
@c:red(★ カメラ画像を ImageView に表示)
★ カメラの画面に戻る
@c:red(★ ギャラリーに保存
★ Firebase より画像を取得する)

☆ 保存用内部ストレージパス取得
@END

@DIV
public class MainActivity extends AppCompatActivity {

	public static int FIRST_PAGE = 0;
	public static int SECOND_PAGE = 1;
	static long MAX_SIZE_BYTE = 1024 * 100;

	private ProgressDialog progress;
	private MyCamera camera;

	private ViewFlipper viewFlipper;
	private ImageView imageView;

	// Firebase storage
	private FirebaseStorage storage;
	private StorageReference storageRef;
	private StorageReference imageRef;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		camera = new MyCamera(MainActivity.this);

		viewFlipper = (ViewFlipper) MainActivity.this.findViewById(R.id.viewFlipper);
		viewFlipper.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_in));
		imageView = (ImageView) MainActivity.this.findViewById(R.id.imageView);

		// ダウンロードする画像ファイルのあるフォルダ
		storage = FirebaseStorage.getInstance();
		storageRef = storage.getReferenceFromUrl("gs://freebase-654b7.appspot.com/image");

		// *************************************
		// カメラ画像を ImageView に表示
		// *************************************
		Button buttonDisplay = (Button) MainActivity.this.findViewById(R.id.imageButton);
		buttonDisplay.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				camera.getCamera().takePicture(null, null, new Camera.PictureCallback() {
					@Override
					public void onPictureTaken(byte[] bytes, Camera camera) {

						// バイト配列を Bitmap に変換( 内容は既に jpeg )
						Bitmap image1 = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
						// 90度回転
						int width = image1.getWidth();
						int height = image1.getHeight();
						Matrix matrix = new Matrix();
						matrix.postRotate (90);
						Bitmap image2 = Bitmap.createBitmap (image1, 0, 0, width, height, matrix, true);

						// 環境依存(これが無いと落ちるデバイスもある)
						imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

						// imageView へ表示
						imageView.setImageBitmap(image2);

						// 次画面へ移動
						viewFlipper.setDisplayedChild(SECOND_PAGE);

					}
				});

			}
		});

		// *************************************
		// カメラの画面に戻る
		// *************************************
		Button buttonBack = (Button) MainActivity.this.findViewById(R.id.backButton);
		buttonBack.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				viewFlipper.setDisplayedChild(FIRST_PAGE);

				// カメラ表示を再開
				camera.getCamera().startPreview();

			}
		});

		// *************************************
		// ギャラリーに保存
		// *************************************
		Button galleryButton = (Button) MainActivity.this.findViewById(R.id.galleryButton);
		galleryButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Log.i("lightbox", "ギャラリーに保存");

				// 撮影
				camera.getCamera().takePicture(new Camera.ShutterCallback() {
					// シャッター音を鳴らす
					@Override
					public void onShutter() {
					}
				}, null, new Camera.PictureCallback() {
					@Override
					public void onPictureTaken(byte[] data, Camera camera) {

						// カメラから jpeg 画像データが取得できた
						if (data != null) {

							// 保存用のパスを取得
							String imagePath = buildPath("firebase", "jpg");
							if (imagePath == null) {
								Toast.makeText(MainActivity.this,
									"ディレクトリを作成できませんでした",
									Toast.LENGTH_SHORT)
									.show();
							} else {

								// 内部ストレージに保存
								FileOutputStream jpg;
								try {
									jpg = new FileOutputStream(imagePath);
									jpg.write(data);
									jpg.close();

									// ギャラリーに反映
									MediaScannerConnection.scanFile(
										MainActivity.this,
										new String[]{imagePath},
										new String[]{"image/jpg"},
										null);

								} catch (Exception e) {
									e.printStackTrace();
								}

							}

						}

						// カメラの表示が止まるので、イベントの引数のカメラでカメラ開始
						camera.startPreview();

					}
				});

			}
		});

		// *************************************
		// Firebase より画像を取得する
		// *************************************
		Button buttonDownload = (Button) MainActivity.this.findViewById(R.id.downloadButton);
		buttonDownload.setAllCaps(false);	// ボタンの文字に小文字を使用する
		buttonDownload.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				imageRef = storageRef.child("sworc.png");
				// ダウンロード
				imageRef.getBytes(MainActivity.MAX_SIZE_BYTE)
					.addOnSuccessListener(new OnSuccessListener<byte[]>() {
						@Override
						public void onSuccess(byte[] bytes) {
							if (bytes != null) {
								Bitmap image = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
								imageView.setImageBitmap(image);
							}
						}
					}).addOnFailureListener(new OnFailureListener() {
					@Override
					public void onFailure(@NonNull Exception e) {
						Log.i("lightbox","データ取得に失敗しました");
						e.printStackTrace();
						Toast.makeText(
							MainActivity.this,
							"Firebase からのダウンロードに失敗しました",
							Toast.LENGTH_LONG)
							.show();
					}
				});

			}
		});


	}

	// *************************************
	// 保存用内部ストレージパス取得
	// *************************************
	private String buildPath(String folder, String ext) {

		String path = null;

		// 内部ストレージにフォルダを作成
		String TargetRootDir
			= String.format("%s/%s",Environment.getExternalStorageDirectory().getPath() , folder );
		File file = new File(TargetRootDir);
		// ディレクトリ初期作成
		if (!file.exists()) {
			if (file.mkdir() == false) {
				Log.i("lightbox", "ディレクトリを作成できませんでした");
				return path;
			}
		}

		// 画像保存パス
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd_HHmmss");
		path = String.format("%s/%s.%s", TargetRootDir,sf.format(cal.getTime()),ext);

		Log.i("lightbox",path);

		return path;

	}
}
@END