XML : IMAGE VIEW ON LANDSCAPE DISPLAYS FLIPPED PHOTO

Im trying to fix this issue which has got me going bonkers! Ive tried numerous codes but nothing seems to be working. Originally what happened is when I opened up the app in portrait view it would display the image in landscape view instead. But when I would open up the app in landscape view and take photo it would display in landscape...how it should. NOW, what I did, is I added another image view and gave it a rotation of 90 now when I take photo in portrait view, it display photo in portrait view, BUT when I take a picture in landscape view now, the photo is flipped:S what do you guys suggest?

This is main activity java

  package com.makingmemad.apk;    import android.app.Activity;  import android.content.ContentResolver;  import android.content.Context;  import android.content.Intent;  import android.database.Cursor;  import android.graphics.Bitmap;  import android.graphics.BitmapFactory;  import android.graphics.Canvas;  import android.graphics.Matrix;  import android.graphics.Paint;  import android.media.ExifInterface;  import android.net.Uri;  import android.os.Build;  import android.os.Bundle;  import android.os.Environment;  import android.provider.MediaStore;  import android.util.Log;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;    import java.io.File;  import java.io.IOException;  import java.lang.reflect.Constructor;  import java.lang.reflect.Field;  import java.lang.reflect.InvocationTargetException;  import java.lang.reflect.Method;  import java.text.SimpleDateFormat;  import java.util.Date;  import java.util.Locale;    public class MainActivity extends Activity {    private String mFileUri;  private final Context mContext = this;    @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);    Button btnbutton1 = (Button) findViewById(R.id.button1);  btnbutton1.setOnClickListener(new OnClickListener() {            @Override      public void onClick(View v) {          Uri uri = createPictureFile();          mFileUri = uri.getEncodedPath();          Intent intent = new    Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);          intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);          startActivityForResult(intent, 100);      }  });  }    @Override  protected void onActivityResult(int requestCode, int resultCode, Intent  data) {  if (requestCode == 100 && resultCode == RESULT_OK) {      if (mFileUri != null) {          Intent intent = new Intent(mContext, SecondActivity.class);          intent.putExtra("filepath", mFileUri);          startActivity(intent);      }  }  }    private static File getOutputMediaFile(int type) {    File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "DCIM/Camera");    if (!mediaStorageDir.exists()) {      if (!mediaStorageDir.mkdirs()) {          return null;      }   }    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",  Locale.getDefault()).format(new Date());  File mediaFile;  if (type == 1) { // image      mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_"  + timeStamp + ".jpg");  } else if (type == 2) { // video      mediaFile = new File(mediaStorageDir.getPath() + File.separator + "VID_"  + timeStamp + ".mp4");  } else {      return null;  }    return mediaFile;  }    public Uri createPictureFile() {  String storageState = Environment.getExternalStorageState();  if (storageState.equals(Environment.MEDIA_MOUNTED)) {      File pictureDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);      pictureDir = new File(pictureDir, "MyApp");        // Create the storage directory if it does not exist      if (!pictureDir.exists()) {          if (!pictureDir.mkdirs()) {              Log.d("user", "failed to create directory");              return null;          }      }        //Create a media file name      String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());      String fileName = pictureDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg";      File imageFile = new File(fileName);        // Convert to URI and return      return Uri.fromFile(imageFile);  } else {      Log.d("user", "No media mounted");      return null;    }   }  }    

This is my acitivty_main.xml file

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  android:background="@drawable/bg"  tools:context="com.MYAPPNAME.apk.MainActivity" >    <Button      android:id="@+id/button1"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_above="@+id/textView1"      android:layout_centerHorizontal="true"      android:layout_marginBottom="86dp"      android:text="LET&apos;S BEGIN"      android:textSize="20dp"      android:textStyle="bold"      android:typeface="serif" />    <TextView      android:id="@+id/textView1"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_alignParentBottom="true"      android:layout_centerHorizontal="true"      android:layout_marginBottom="72dp"      android:text="Before you begin, PLEASE NOTE that this game is intended for entertainment purposes only."      android:textAppearance="?android:attr/textAppearanceLarge"      android:textColor="#fff"      android:textSize="24dp"      android:textStyle="bold" />    </RelativeLayout>    

This is my SecondActivity.java file

  package com.MYAPPNAME.apk;    import android.app.Activity;  import android.content.Intent;  import android.graphics.Bitmap;  import android.graphics.BitmapFactory;  import android.os.Bundle;  import android.widget.ImageView;    import java.io.File;    public class SecondActivity extends Activity {    @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_second);    Intent intent = getIntent();  String filepath = intent.getStringExtra("filepath");  BitmapFactory.Options options = new BitmapFactory.Options();  options.inSampleSize = 8; // down sizing image as it throws OutOfMemory         Exception for larger images   filepath = filepath.replace("file://", ""); // remove to avoid        BitmapFactory.decodeFile return null   File imgFile = new File(filepath);   if (imgFile.exists()) {  ImageView imageView = (ImageView) findViewById(R.id.imageView1);  Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath(),   options);  imageView.setImageBitmap(bitmap);      }   }  }    

This is my activity_second.xml

   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"  android:layout_height="match_parent"  android:paddingBottom="@dimen/activity_vertical_margin"  android:paddingLeft="@dimen/activity_horizontal_margin"  android:paddingRight="@dimen/activity_horizontal_margin"  android:paddingTop="@dimen/activity_vertical_margin"  android:background="@drawable/bg"  tools:context="com.MYAPPNAME.apk.SecondActivity" >    <ImageView  android:id="@+id/imageView1"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_alignParentTop="true"  android:layout_centerHorizontal="true"  android:layout_marginTop="185dp"  android:layout_alignParentRight="true"  android:rotation="90"/>    <ImageView  android:id="@+id/imageView2"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_alignBottom="@+id/imageView1"  android:layout_marginBottom="65dp"  android:layout_marginRight="134dp"  android:layout_toLeftOf="@+id/imageView1" />    </RelativeLayout>    

This is my ExifUtil file

  package com.MYAPPNAME.apk;    import java.io.IOException;  import java.lang.reflect.Constructor;  import java.lang.reflect.Field;  import java.lang.reflect.InvocationTargetException;  import java.lang.reflect.Method;    import android.graphics.Bitmap;  import android.graphics.BitmapFactory;  import android.graphics.Matrix;  import android.os.Build;      public class ExifUtil {        public Bitmap rotateBitmap(String path) {      Bitmap myBitmap = BitmapFactory.decodeFile(path);      return ExifUtil.rotateBitmap(path, myBitmap);  }      /**  * @see http://sylvana.net/jpegcrop/exif_orientation.html  */  public static Bitmap rotateBitmap(String src, Bitmap bitmap) {  try {  int orientation = getExifOrientation(src);    if (orientation == 1) {      return bitmap;  }    Matrix matrix = new Matrix();  switch (orientation) {      case 2:          matrix.setScale(-1, 1);          break;      case 3:          matrix.setRotate(180);          break;      case 4:          matrix.setRotate(180);          matrix.postScale(-1, 1);          break;      case 5:          matrix.setRotate(90);          matrix.postScale(-1, 1);          break;      case 6:          matrix.setRotate(90);          break;      case 7:          matrix.setRotate(-90);          matrix.postScale(-1, 1);          break;      case 8:          matrix.setRotate(-90);          break;      default:          return bitmap;     }       try {      Bitmap oriented = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),  bitmap.getHeight(), matrix, true);      bitmap.recycle();      return oriented;  } catch (OutOfMemoryError e) {      e.printStackTrace();      return bitmap;   }  } catch (IOException e) {  e.printStackTrace();  }    return bitmap;  }    private static int getExifOrientation(String src) throws IOException {  int orientation = 1;    try {  /**   * if your are targeting only api level >= 5   * ExifInterface exif = new ExifInterface(src);   * orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);   */  if (Build.VERSION.SDK_INT >= 5) {      Class<?> exifClass = Class.forName("android.media.ExifInterface");      Constructor<?> exifConstructor = exifClass.getConstructor(new Class[] {  String.class });      Object exifInstance = exifConstructor.newInstance(new Object[] { src     });      Method getAttributeInt = exifClass.getMethod("getAttributeInt", new  Class[] { String.class, int.class });      Field tagOrientationField = exifClass.getField("TAG_ORIENTATION");      String tagOrientation = (String) tagOrientationField.get(null);      orientation = (Integer) getAttributeInt.invoke(exifInstance, new   Object[] { tagOrientation, 1});  }  } catch (ClassNotFoundException e) {  e.printStackTrace();   } catch (SecurityException e) {  e.printStackTrace();  } catch (NoSuchMethodException e) {  e.printStackTrace();  } catch (IllegalArgumentException e) {  e.printStackTrace();    } catch (InstantiationException e) {  e.printStackTrace();  } catch (IllegalAccessException e) {  e.printStackTrace();  } catch (InvocationTargetException e) {  e.printStackTrace();  } catch (NoSuchFieldException e) {  e.printStackTrace();  }    return orientation;  }  }    

No comments:

Post a Comment