我有一种方法可以拍照,也可以按照我想要的方式拍摄水平形式的样本,水平圈,然后按照我希望进行锻炼的方式保存垂直照片,该活动称为ViewerActivity,这就是问题所在在ImageView中显示照片的瞬间:/他正在阅读,并且有ExifInterface类可以控制图像的方向,但是在显示图像时仍然是水平的

该班负责发送照片。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
        try {
            ExifInterface exifInterface = new ExifInterface(photoFile.getAbsolutePath());
            int valor = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
            switch (valor) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                    orientation = 90;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    orientation = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    orientation = 270;
                    break;
            }
        } catch (Exception e) {
            Log.d("mensaje", e.toString());
        }
        Intent i = new Intent(this, ViewerActivity.class);
        i.putExtra(EXTRA_PHOTO_PATH, photoFile.getAbsolutePath());
        i.putExtra(EXTRA_PHOTO_ORIENTATION, orientation);
        i.putExtra(EXTRA_PHOTO_EDIT, false);
        startActivityForResult(i, 10);


该ViewerActivity类显示照片,然后将其发送

private void sendPicture() {
    Intent intent = new Intent();
    intent.putExtra("path", localPath);
    intent.putExtra("orientation",orientation);
    setResult(Activity.RESULT_OK, intent);
    finish();
}

最佳答案

使用RotateLayout,完整的课程和示例在下面的链接中可用。

https://github.com/rongi/rotate-layout

与使用RotateLayout制作新旋转的Bitmap相比,使用Matrix非常容易,并且占用的内存更少。

将您的ImageView放在RotateLayout内,如下代码

<com.github.rongi.rotate_layout.layout.RotateLayout
  android:id="@+id/form3_container"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:angle="180">

  <ImageView
   android:id="@+id/imageview"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   />
</com.github.rongi.rotate_layout.layout.RotateLayout>


然后将通过orientation获取的ExifInterface值设置为angleRotateLayout属性。然后将ImageView旋转,无需担心位图或ExifInterface orientation的任何其他问题。

您可以从Java代码动态地将Angle值设置为RotateLayout对象,如下所示

rotateLayout.setAngle(newAngle);

10-08 07:12