If you want to get the image from gallery or capture the image and set it to the imageview in portrait mode then following code will help you..
In onCreate()
imageViewRound.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
selectImage();
}
});
private void selectImage() {
Constants.iscamera = true;
final CharSequence[] items = { "Take Photo", "Choose from Library",
"Cancel" };
TextView title = new TextView(context);
title.setText("Add Photo!");
title.setBackgroundColor(Color.BLACK);
title.setPadding(10, 15, 15, 10);
title.setGravity(Gravity.CENTER);
title.setTextColor(Color.WHITE);
title.setTextSize(22);
AlertDialog.Builder builder = new AlertDialog.Builder(
AddContactActivity.this);
builder.setCustomTitle(title);
// builder.setTitle("Add Photo!");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals("Take Photo")) {
// Intent intent = new
// Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
/*
* File photo = new
* File(Environment.getExternalStorageDirectory(),
* "Pic.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT,
* Uri.fromFile(photo)); imageUri = Uri.fromFile(photo);
*/
// startActivityForResult(intent,TAKE_PICTURE);
Intent intents = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intents.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
// start the image capture Intent
startActivityForResult(intents, TAKE_PICTURE);
} else if (items[item].equals("Choose from Library")) {
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(
Intent.createChooser(intent, "Select Picture"),
SELECT_PICTURE);
} else if (items[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
@SuppressLint("NewApi")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case SELECT_PICTURE:
Bitmap bitmap = null;
if (resultCode == RESULT_OK) {
if (data != null) {
try {
Uri selectedImage = data.getData();
String[] filePath = { MediaStore.Images.Media.DATA };
Cursor c = context.getContentResolver().query(
selectedImage, filePath, null, null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePath[0]);
String picturePath = c.getString(columnIndex);
c.close();
imageViewRound.setVisibility(View.VISIBLE);
// Bitmap thumbnail =
// (BitmapFactory.decodeFile(picturePath));
Bitmap thumbnail = decodeSampledBitmapFromResource(
picturePath, 500, 500);
// rotated
Bitmap thumbnail_r = imageOreintationValidator(
thumbnail, picturePath);
imageViewRound.setBackground(null);
imageViewRound.setImageBitmap(thumbnail_r);
IsImageSet = true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
break;
case TAKE_PICTURE:
if (resultCode == RESULT_OK) {
previewCapturedImage();
}
break;
}
}
@SuppressLint("NewApi")
private void previewCapturedImage() {
try {
// hide video preview
imageViewRound.setVisibility(View.VISIBLE);
// bimatp factory
BitmapFactory.Options options = new BitmapFactory.Options();
// downsizing image as it throws OutOfMemory Exception for larger
// images
options.inSampleSize = 8;
final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
options);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 500, 500,
false);
// rotated
Bitmap thumbnail_r = imageOreintationValidator(resizedBitmap,
fileUri.getPath());
imageViewRound.setBackground(null);
imageViewRound.setImageBitmap(thumbnail_r);
IsImageSet = true;
Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG)
.show();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
// for roted image......
private Bitmap imageOreintationValidator(Bitmap bitmap, String path) {
ExifInterface ei;
try {
ei = new ExifInterface(path);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
bitmap = rotateImage(bitmap, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
bitmap = rotateImage(bitmap, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
bitmap = rotateImage(bitmap, 270);
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
private Bitmap rotateImage(Bitmap source, float angle) {
Bitmap bitmap = null;
Matrix matrix = new Matrix();
matrix.postRotate(angle);
try {
bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(),
source.getHeight(), matrix, true);
} catch (OutOfMemoryError err) {
source.recycle();
Date d = new Date();
CharSequence s = DateFormat
.format("MM-dd-yy-hh-mm-ss", d.getTime());
String fullPath = Environment.getExternalStorageDirectory()
+ "/RYB_pic/" + s.toString() + ".jpg";
if ((fullPath != null) && (new File(fullPath).exists())) {
new File(fullPath).delete();
}
bitmap = null;
err.printStackTrace();
}
return bitmap;
}
public static Bitmap decodeSampledBitmapFromResource(String pathToFile,
int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(pathToFile, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);
Log.e("inSampleSize", "inSampleSize______________in storage"
+ options.inSampleSize);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(pathToFile, options);
}
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
// Calculate ratios of height and width to requested height and
// width
final int heightRatio = Math.round((float) height
/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
// Choose the smallest ratio as inSampleSize value, this will
// guarantee
// a final image with both dimensions larger than or equal to the
// requested height and width.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
private static File getOutputMediaFile(int type) {
// External sdcard location
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
IMAGE_DIRECTORY_NAME);
// Create the storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create "
+ IMAGE_DIRECTORY_NAME + " directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
public Uri getOutputMediaFileUri(int type) {
return Uri.fromFile(getOutputMediaFile(type));
}
Hope This will help you....!!!
If targetSdkVersion is higher than 24, then FileProvider is used to grant access.
Create an xml file(Path: res\xml) provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
Add a Provider in AndroidManifest.xml
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
and replace
return Uri.fromFile(getOutputMediaFile(type));
To
return FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider", getOutputMediaFile(type));