我有一种方法可以拍照,也可以按照我想要的方式拍摄水平形式的样本,水平圈,然后按照我希望进行锻炼的方式保存垂直照片,该活动称为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
值设置为angle
的RotateLayout
属性。然后将ImageView
旋转,无需担心位图或ExifInterface
orientation
的任何其他问题。您可以从Java代码动态地将Angle值设置为
RotateLayout
对象,如下所示rotateLayout.setAngle(newAngle);