1. 준비물
Bitmap을 이용할 것입니다. 그러므로 Bitmap관련 모듈들을 import하고 getBitmapFromUri를 새로 만듭니다.
1 2 3 4 5 | import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; private Bitmap getBitmapFromUri(Uri uri) throws IOException { } | cs |
그 다음에 FileDescriptor를 import 하고 새로 FileDescriptor를 써 줍니다.
1 2 3 4 5 6 | import java.io.FileDescriptor; import java.io.FileOutputStream; import java.io.IOException; ParcelFileDescriptor parcelFileDescriptor = getActivity().getContentResolver().openFileDescriptor(uri, "r"); FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); | cs |
2. 비트맵 파일 편집
파일을 가져온 다음엔 BitmapFactory를 이용해서 세부 옵션을 설정합니다.
BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inJustDecodeBounds = true; BitmapFactory.decodeFileDescriptor(fileDescriptor, null, opts); | cs |
옵션은 따로 정해줄 수 있습니다.
int width = opts.outWidth; int height = opts.outHeight; float sampleRatio = getSampleRatio(width, height); opts.inJustDecodeBounds = false; opts.inSampleSize = (int) sampleRatio; | cs |
그 후에 Bitmap 스트림을 닫아줍니다.
Bitmap resizedBitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor, null, opts); Log.d("Resizing", "Resized Width / Height : " + resizedBitmap.getWidth() + "/" + resizedBitmap.getHeight()); parcelFileDescriptor.close(); return resizedBitmap; | cs |
3. 이미지 파일에 부여될 텍스트 편집
Bitmap으로 불러온 파일에 이름을 지정할 것이므로 아래의 코드를 activity에서 원하는 자리에 위치시킵니다. 부모레이아웃과 자식레이아웃을 설정해서 작업해봤습니다.
public void onAddField(View v) { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View rowView = inflater.inflate(R.layout.field, null); parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount()); int count = parentLinearLayout.getChildCount(); TextView result_field = findViewById(R.id.result); result_field.setText(Integer.toString((count-1))); View view = parentLinearLayout.getChildAt(count-1); if(view instanceof EditText){ EditText last = (EditText)view; last.setSelection(0); } } | cs |
그 다음 이름을 사용자로부터 받은 후 등록여부를 재차 확인하는 버튼을 구현합니다.
@Override public void onBackPressed() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("You can Save your title"); builder.setMessage("re-check your message?"); builder.setPositiveButton("Enter", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }); builder.setNegativeButton("Deny", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); AlertDialog alert = builder.create(); alert.show(); } } | cs |
이렇게 긍정 버튼과 부정 버튼을 설정했습니다. 사용자가 Enter와 Deny 둘 중 하나를 선택하여 이름을 지정할 수 있습니다.
'Java' 카테고리의 다른 글
[android] Infinite Scroll 구현 예제 (0) | 2018.02.04 |
---|---|
[utils] Bitmap 파일 다루는 데에 도움될 만한 유틸리티 함수 예제 (0) | 2018.02.03 |
[android] 이미지 갤러리 그 외 사용방법 (0) | 2018.02.03 |
[android] 이미지 갤러리 (0) | 2018.02.03 |
[android] 비트맵 파일 retrofit 통신 예제 (0) | 2018.02.03 |