package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class waste_request01 extends AppCompatActivity implements View.OnClickListener {
Button btnCamera;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.waste_request01);
// 디자인 정의
btnCamera = (Button) findViewById(R.id.btnPhoto);
imageView = (ImageView) findViewById(R.id.imageView);
btnCamera.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
// 카메라촬영 클릭 이벤트
case R.id.btnPhoto:
// 카메라 기능을 Intent
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, 0);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 카메라 촬영을 하면 이미지뷰에 사진 삽입
if(requestCode == 0 && resultCode == RESULT_OK) {
// Bundle로 데이터를 입력
Bundle extras = data.getExtras();
// Bitmap으로 컨버전
Bitmap imageBitmap = (Bitmap) extras.get("data");
// 이미지뷰에 Bitmap으로 이미지를 입력
imageView.setImageBitmap(imageBitmap);
}
}
}
//border_layout.xml파일 drawable에 생성
//<?xml version="1.0" encoding="utf-8"?>
//<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
// <item
// android:bottom="2dp"
// android:end="2dp"
// android:start="2dp"
// android:top="2dp">
// <shape android:shape="rectangle">
// <stroke
// android:width="2dp"
// android:color="#000000" />
// <solid android:color="null" />
// </shape>
// </item>
//</layer-list>
//
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="20dp"
tools:context=".waste_request01">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="10">
<ImageButton
android:id="@+id/imageButton_back1"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#FFFFFF"
app:srcCompat="@drawable/ic_baseline_arrow_back_ios_24" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center"
android:layout_weight="9"
android:text="폐기물 처리"
android:textColor="#313234"
android:textSize="9pt" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="200dp"
android:gravity="center"
android:background="@drawable/border_layout"
android:text="사진 촬영" />
<Button
android:id="@+id/btnPhoto"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="사진 등록" />
</LinearLayout>
<TextView
android:id="@+id/textView2"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="폐기물 종류"
android:textSize="15sp" />
<EditText
android:id="@+id/editTextName"
android:layout_width="300dp"
android:layout_height="48dp"
android:ems="10"
android:hint="입력하세요"
android:inputType="textPersonName" />
<TextView
android:id="@+id/textView3"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="폐기물 크기"
android:textSize="15sp" />
<EditText
android:id="@+id/editTextSize"
android:layout_width="300dp"
android:layout_height="48dp"
android:ems="10"
android:hint="입력하세요"
android:inputType="textPersonName" />
<TextView
android:id="@+id/textView4"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="폐기물 처리 납부 비용"
android:textSize="15sp" />
<EditText
android:id="@+id/editTextPay"
android:layout_width="300dp"
android:layout_height="48dp"
android:ems="10"
android:gravity="right"
android:inputType="textPersonName"
android:text="원" />
<Button
android:id="@+id/next_bu"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:text="NEXT" />
</LinearLayout>
수정
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.FileProvider;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageDecoder;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class waste_request01 extends AppCompatActivity implements View.OnClickListener {
Button btnCamera;
ImageView imageView;
String imageFilePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.waste_request01);
// 디자인 정의
btnCamera = (Button) findViewById(R.id.btnPhoto);
imageView = (ImageView) findViewById(R.id.imageView);
btnCamera.setOnClickListener(this);
}
Uri photoUri;
@Override
public void onClick(View view) {
switch (view.getId()) {
// 카메라촬영 클릭 이벤트
case R.id.btnPhoto:
// 카메라 기능을 Intent
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 사진파일 변수 선언 및 경로세팅
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
}
// 사진을 저장하고 이미지뷰에 출력
if (photoFile != null) {
photoUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", photoFile);
i.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(i, 0);
}
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 카메라 촬영을 하면 이미지뷰에 사진 삽입
if (requestCode == 0 && resultCode == RESULT_OK) {
// 이미지파일을 bitmap 변수에 초기화
Bitmap bitmap = BitmapFactory.decodeFile(imageFilePath);
ExifInterface exif = null;
try {
exif = new ExifInterface(imageFilePath);
}
catch(IOException e){
e.printStackTrace();
}
// 이미지를 회전각도를 구한다
int exifOrientation;
int exifDegree;
if (exif != null) {
exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
exifDegree = exifOrientationToDegrees(exifOrientation);
} else {
exifDegree = 0;
}
// 이미지를 출력
imageView.setImageBitmap(rotate(bitmap, exifDegree));
}
}
// ImageFile의 경로를 가져올 메서드 선언
private File createImageFile() throws IOException {
// 파일이름을 세팅 및 저장경로 세팅
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File StorageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName,
".jpg",
storageDir
);
imageFilePath = image.getAbsolutePath();
return image;
}
// 사진의 돌아간 각도를 계산하는 메서드 선언
private int exifOrientationToDegrees(int exifOrientation) {
if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
return 90;
} else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
return 180;
} else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
return 270;
}
return 0;
}
// 이미지를 회전시키는 메서드 선언
private Bitmap rotate(Bitmap bitmap, float degree) {
Matrix matrix = new Matrix();
matrix.postRotate(degree);
return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}
}
//border_layout.xml파일 drawable에 생성
//<?xml version="1.0" encoding="utf-8"?>
//<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
// <item
// android:bottom="2dp"
// android:end="2dp"
// android:start="2dp"
// android:top="2dp">
// <shape android:shape="rectangle">
// <stroke
// android:width="2dp"
// android:color="#000000" />
// <solid android:color="null" />
// </shape>
// </item>
//</layer-list>
//